| 1 | import * as Fly from "@/Fly"; |
| 2 | import type * as Effect from "effect/Effect"; |
| 3 | |
| 4 | export 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 | */ |
| 14 | export class Ping extends Fly.Service<Ping, Named>()("Ping") {} |
| 15 | export class Pong extends Fly.Service<Pong, Named>()("Pong") {} |