1import * as Fly from "@/Fly";
2import type * as Effect from "effect/Effect";
3
4export interface Named {
5 name: () => Effect.Effect<string>;
6}
7
8/**
9 * Two public Services that bind each other. Each is declared as a tag class
10 * with its method shape, so the other can bind it before its implementation
11 * exists. `rpc-ping.ts` and `rpc-pong.ts` implement them; deploying the pair
12 * needs the Service precreate to break the dependency cycle.
13 */
14export class Ping extends Fly.Service<Ping, Named>()("Ping") {}
15export class Pong extends Fly.Service<Pong, Named>()("Pong") {}