1import type * as Effect from "effect/Effect";
2import * as Binding from "../../Binding.ts";
3import type { ReadWriteClient } from "../../Redis/index.ts";
4import type { Instance } from "./Instance.ts";
5
6/**
7 * Bind a Memorystore {@link Instance} with read + write access.
8 *
9 * Uses the shared `alchemy/Redis` RESP client. Provide
10 * {@link ReadWriteRedisHttp}.
11 *
12 * ### Read/Write
13 * **Example:** Set then get
14 * ```typescript
15 * const cache = yield* GCP.Redis.ReadWriteRedis(Memorystore);
16 * yield* cache.set("marker", "hello");
17 * const value = yield* cache.get("marker");
18 * ```
19 *
20 * @binding
21 * @category Redis
22 */
23export interface ReadWriteRedis extends Binding.Service<
24 ReadWriteRedis,
25 "GCP.Redis.ReadWriteRedis",
26 (instance: Instance) => Effect.Effect<ReadWriteRedisClient>
27> {}
28
29export const ReadWriteRedis = Binding.Service<ReadWriteRedis>(
30 "GCP.Redis.ReadWriteRedis",
31);
32
33export type ReadWriteRedisClient = ReadWriteClient;