1import * as Cloudflare from "alchemy/Cloudflare";
2import * as Effect from "effect/Effect";
3import * as Layer from "effect/Layer";
4import * as Etag from "effect/http/Etag";
5import * as HttpPlatform from "effect/http/HttpPlatform";
6import * as HttpRouter from "effect/http/HttpRouter";
7import * as HttpApiBuilder from "effect/http-api/HttpApiBuilder";
8import { BackendApi, Greeting } from "./Spec.ts";
9
10export default class Service extends Cloudflare.Worker<Service>()(
11 "Service",
12 {
13 main: import.meta.url,
14 },
15 Effect.gen(function* () {
16 const helloGroup = HttpApiBuilder.group(BackendApi, "Hello", (handlers) =>
17 handlers.handle("hello", () =>
18 Effect.succeed(new Greeting({ message: "Hello World" })),
19 ),
20 );
21
22 return {
23 fetch: HttpApiBuilder.layer(BackendApi).pipe(
24 Layer.provide(helloGroup),
25 Layer.provide([HttpPlatform.layer, Etag.layer]),
26 HttpRouter.toHttpEffect,
27 ),
28 };
29 }),
30) {}