1import type * as r53r from "@distilled.cloud/aws/route53resolver";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { ResolverRule } from "./ResolverRule.ts";
5
6export interface UpdateResolverRuleRequest extends Omit<
7 r53r.UpdateResolverRuleRequest,
8 "ResolverRuleId"
9> {}
10
11/**
12 * Runtime binding for `route53resolver:UpdateResolverRule` — update the
13 * bound {@link ResolverRule}'s mutable configuration (name, target IPs,
14 * outbound endpoint); the rule ID is injected automatically.
15 *
16 * The canonical runtime use: DNS failover automation — a Lambda health-checks
17 * the on-premises resolvers a FORWARD rule targets and swaps `TargetIps` to
18 * the healthy set when one goes dark.
19 *
20 * Provide `Route53Resolver.UpdateResolverRuleHttp` on the hosting Lambda
21 * Function to satisfy the requirement.
22 * ### Updating Rules at Runtime
23 * **Example:** Fail Over the Rule's Target IPs
24 * ```typescript
25 * // init — grants route53resolver:UpdateResolverRule on the rule
26 * const updateRule = yield* AWS.Route53Resolver.UpdateResolverRule(rule);
27 *
28 * // runtime
29 * yield* updateRule({
30 * Config: { TargetIps: [{ Ip: "192.168.2.10", Port: 53 }] },
31 * });
32 * ```
33 *
34 * @binding
35 */
36export interface UpdateResolverRule extends Binding.Service<
37 UpdateResolverRule,
38 "AWS.Route53Resolver.UpdateResolverRule",
39 (
40 rule: ResolverRule,
41 ) => Effect.Effect<
42 (
43 request: UpdateResolverRuleRequest,
44 ) => Effect.Effect<
45 r53r.UpdateResolverRuleResponse,
46 r53r.UpdateResolverRuleError
47 >
48 >
49> {}
50
51export const UpdateResolverRule = Binding.Service<UpdateResolverRule>(
52 "AWS.Route53Resolver.UpdateResolverRule",
53);