Effect CommunityEC
Effect Community12mo ago
2 replies
whatplan

Proposal for Adding an In-Memory Resolver Example to the `/rpc` Package for Testing

Thoughts on adding an example to the /rpc package of a vanilla in memory resolver setup (mainly for testing purposes)?
something like
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");
  })
);
Was this page helpful?