1import * as Effect from "effect/Effect";
2import * as Layer from "effect/Layer";
3import { makeBucketBinding, makeHelpers } from "./BucketBinding.ts";
4import { makeRead } from "./ReadBucketBinding.ts";
5import {
6 ReadWriteBucket,
7 type ReadWriteBucketClient,
8} from "./ReadWriteBucket.ts";
9import { makeWrite } from "./WriteBucketBinding.ts";
10
11/**
12 * Implementation of the {@link ReadWriteBucket} binding that uses a Worker binding.
13 */
14export const ReadWriteBucketBinding = Layer.effect(
15 ReadWriteBucket,
16 Effect.suspend(() => makeBucketBinding({ makeClient: makeReadWrite })),
17);
18
19/** Build the read-write binding client from its read and write halves. */
20export const makeReadWrite = (
21 helpers: ReturnType<typeof makeHelpers>,
22): ReadWriteBucketClient =>
23 ({
24 ...makeRead(helpers),
25 ...makeWrite(helpers),
26 }) satisfies ReadWriteBucketClient;