1import type * as efs from "@distilled.cloud/aws/efs";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { FileSystem } from "./FileSystem.ts";
5
6/**
7 * `DescribeReplicationConfigurations` request with `FileSystemId` injected
8 * from the bound {@link FileSystem}.
9 */
10export interface DescribeReplicationConfigurationsRequest extends Omit<
11 efs.DescribeReplicationConfigurationsRequest,
12 "FileSystemId"
13> {}
14
15/**
16 * Runtime binding for the `DescribeReplicationConfigurations` operation (IAM
17 * action `elasticfilesystem:DescribeReplicationConfigurations` on the file
18 * system ARN).
19 *
20 * Reads the bound {@link FileSystem}'s replication configuration —
21 * destination file systems, replication status, and last-replicated
22 * timestamps. A file system with no replication fails with the typed
23 * `ReplicationNotFound`. Provide the implementation with
24 * `Effect.provide(AWS.EFS.DescribeReplicationConfigurationsHttp)`.
25 * ### Replication
26 * **Example:** Check replication health
27 * ```typescript
28 * const describeReplicationConfigurations =
29 * yield* AWS.EFS.DescribeReplicationConfigurations(files);
30 *
31 * const status = yield* describeReplicationConfigurations().pipe(
32 * Effect.map((r) => r.Replications?.[0]?.Destinations[0]?.Status),
33 * Effect.catchTag("ReplicationNotFound", () => Effect.succeed(undefined)),
34 * );
35 * ```
36 *
37 * @binding
38 */
39export interface DescribeReplicationConfigurations extends Binding.Service<
40 DescribeReplicationConfigurations,
41 "AWS.EFS.DescribeReplicationConfigurations",
42 (
43 fileSystem: FileSystem,
44 ) => Effect.Effect<
45 (
46 request?: DescribeReplicationConfigurationsRequest,
47 ) => Effect.Effect<
48 efs.DescribeReplicationConfigurationsResponse,
49 efs.DescribeReplicationConfigurationsError
50 >
51 >
52> {}
53export const DescribeReplicationConfigurations =
54 Binding.Service<DescribeReplicationConfigurations>(
55 "AWS.EFS.DescribeReplicationConfigurations",
56 );