1import type * as elbv2 from "@distilled.cloud/aws/elastic-load-balancing-v2";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { LoadBalancer } from "./LoadBalancer.ts";
5
6/**
7 * `DescribeCapacityReservation` request with `LoadBalancerArn` injected from
8 * the bound {@link LoadBalancer}.
9 */
10export interface DescribeCapacityReservationRequest extends Omit<
11 elbv2.DescribeCapacityReservationInput,
12 "LoadBalancerArn"
13> {}
14
15/**
16 * Runtime binding for the `DescribeCapacityReservation` operation (IAM
17 * action `elasticloadbalancing:DescribeCapacityReservation`; ELBv2
18 * `Describe*` actions do not support resource-level permissions, so the
19 * grant is on `*`).
20 *
21 * Reads the bound load balancer's LCU capacity reservation status — pairs
22 * with {@link ModifyCapacityReservation} to confirm a reservation is
23 * `provisioned` before a known traffic spike. Provide the implementation
24 * with `Effect.provide(AWS.ELBv2.DescribeCapacityReservationHttp)`.
25 * ### Capacity Reservation
26 * **Example:** Read the current reservation
27 * ```typescript
28 * // init — bind the operation to the load balancer
29 * const describeCapacityReservation =
30 * yield* AWS.ELBv2.DescribeCapacityReservation(loadBalancer);
31 *
32 * // runtime — read reservation state per Availability Zone
33 * const reservation = yield* describeCapacityReservation();
34 * const states = reservation.CapacityReservationState?.map((s) => s.State);
35 * ```
36 *
37 * @binding
38 */
39export interface DescribeCapacityReservation extends Binding.Service<
40 DescribeCapacityReservation,
41 "AWS.ELBv2.DescribeCapacityReservation",
42 (
43 loadBalancer: LoadBalancer,
44 ) => Effect.Effect<
45 (
46 request?: DescribeCapacityReservationRequest,
47 ) => Effect.Effect<
48 elbv2.DescribeCapacityReservationOutput,
49 elbv2.DescribeCapacityReservationError
50 >
51 >
52> {}
53
54export const DescribeCapacityReservation =
55 Binding.Service<DescribeCapacityReservation>(
56 "AWS.ELBv2.DescribeCapacityReservation",
57 );