1import type * as Effect from "effect/Effect";
2import * as Binding from "../../Binding.ts";
3import type { Bucket } from "./Bucket.ts";
4import type { ReadBucketClient } from "./ReadBucket.ts";
5import type { WriteBucketClient } from "./WriteBucket.ts";
6
7export interface ReadWriteBucketClient
8 extends ReadBucketClient, WriteBucketClient {}
9
10/**
11 * Read and write access to a Cloud Storage {@link Bucket}. Grants
12 * `roles/storage.objectUser` on the bucket only.
13 *
14 * ### Reading and writing
15 * **Example:** Copy within a bucket
16 * ```typescript
17 * const files = yield* GCP.Storage.ReadWriteBucket(bucket);
18 * const source = yield* files.get("in.txt");
19 * if (source) yield* files.put("out.txt", source.body);
20 * // …provided with Effect.provide(GCP.Storage.ReadWriteBucketHttp)
21 * ```
22 *
23 * @binding
24 * @category Storage
25 */
26export interface ReadWriteBucket extends Binding.Service<
27 ReadWriteBucket,
28 "GCP.Storage.ReadWriteBucket",
29 (bucket: Bucket) => Effect.Effect<ReadWriteBucketClient>
30> {}
31
32export const ReadWriteBucket = Binding.Service<ReadWriteBucket>(
33 "GCP.Storage.ReadWriteBucket",
34);