import { Rpc, RpcResolver, RpcRouter } from "@effect/rpc";
import { expect, it } from "@effect/vitest";
import { Effect, Schema } from "effect";
export class Test extends Schema.TaggedRequest<Test>()("Test", {
failure: Schema.Never,
success: Schema.String,
payload: {
foo: Schema.String,
},
}) {}
const router = RpcRouter.make(
Rpc.effect(Test, ({ foo }) => Effect.succeed(`${foo} success`))
);
const handler = RpcRouter.toHandler(router);
export type Router = typeof router;
const resolver = RpcResolver.make(handler)<Router>();
const client = RpcResolver.toClient(resolver);
it.effect("should work", () =>
Effect.gen(function* () {
const result = yield* client(new Test({ foo: "bar" }));
expect(result).toEqual("bar success");
})
);
import { Rpc, RpcResolver, RpcRouter } from "@effect/rpc";
import { expect, it } from "@effect/vitest";
import { Effect, Schema } from "effect";
export class Test extends Schema.TaggedRequest<Test>()("Test", {
failure: Schema.Never,
success: Schema.String,
payload: {
foo: Schema.String,
},
}) {}
const router = RpcRouter.make(
Rpc.effect(Test, ({ foo }) => Effect.succeed(`${foo} success`))
);
const handler = RpcRouter.toHandler(router);
export type Router = typeof router;
const resolver = RpcResolver.make(handler)<Router>();
const client = RpcResolver.toClient(resolver);
it.effect("should work", () =>
Effect.gen(function* () {
const result = yield* client(new Test({ foo: "bar" }));
expect(result).toEqual("bar success");
})
);