import { HttpRouter, HttpServer } from "@effect/platform";
import { createServer } from "node:http";
import { NodeHttpServer, NodeRuntime } from "@effect/platform-node";
import { Effect, Layer, Schema } from "effect";
import { Rpc, RpcGroup, RpcSerialization, RpcServer } from "@effect/rpc";
const Group = RpcGroup.make(
Rpc.make('TestRpc', {
success: Schema.String,
error: Schema.Void,
payload: Schema.Void,
}),
);
const GroupHandler = Group.toLayer({
TestRpc: () => Effect.succeed('Hello world!'),
});
const RpcApp = RpcServer.toHttpApp(Group).pipe(
Effect.tap(() => Effect.log('Rpc reached')),
Effect.provide(GroupHandler),
Effect.provide(RpcSerialization.layerJson),
Effect.scoped,
Effect.flatten,
);
const routes = HttpRouter.empty.pipe(HttpRouter.post("/", RpcApp))
const HttpLive = HttpServer.serve(routes).pipe(
HttpServer.withLogAddress,
Layer.provide(NodeHttpServer.layer(createServer, { port: 3000 }))
)
NodeRuntime.runMain(Layer.launch(HttpLive))
import { HttpRouter, HttpServer } from "@effect/platform";
import { createServer } from "node:http";
import { NodeHttpServer, NodeRuntime } from "@effect/platform-node";
import { Effect, Layer, Schema } from "effect";
import { Rpc, RpcGroup, RpcSerialization, RpcServer } from "@effect/rpc";
const Group = RpcGroup.make(
Rpc.make('TestRpc', {
success: Schema.String,
error: Schema.Void,
payload: Schema.Void,
}),
);
const GroupHandler = Group.toLayer({
TestRpc: () => Effect.succeed('Hello world!'),
});
const RpcApp = RpcServer.toHttpApp(Group).pipe(
Effect.tap(() => Effect.log('Rpc reached')),
Effect.provide(GroupHandler),
Effect.provide(RpcSerialization.layerJson),
Effect.scoped,
Effect.flatten,
);
const routes = HttpRouter.empty.pipe(HttpRouter.post("/", RpcApp))
const HttpLive = HttpServer.serve(routes).pipe(
HttpServer.withLogAddress,
Layer.provide(NodeHttpServer.layer(createServer, { port: 3000 }))
)
NodeRuntime.runMain(Layer.launch(HttpLive))