1import type * as Effect from "effect/Effect";
2import * as Binding from "../Binding.ts";
3import type { WriteClient } from "../Redis/index.ts";
4import type { Redis } from "./Redis.ts";
5
6/**
7 * Bind a {@link Redis} database with write access (`set`, `del`).
8 *
9 * `WriteRedis` is the Context tag, the type, and the callable —
10 * `yield* Railway.WriteRedis(Cache)`. Provide {@link WriteRedisHttp}.
11 *
12 *
13 * ### Write
14 * **Example:** Set a key
15 * ```typescript
16 * const cache = yield* Railway.WriteRedis(Cache);
17 * yield* cache.set("marker", "hello");
18 * ```
19 *
20 * @binding
21 * @product Redis
22 */
23export interface WriteRedis extends Binding.Service<
24 WriteRedis,
25 "Railway.WriteRedis",
26 (redis: Redis) => Effect.Effect<WriteRedisClient>
27> {}
28
29export const WriteRedis = Binding.Service<WriteRedis>("Railway.WriteRedis");
30
31export type WriteRedisClient = WriteClient;