1import type * as sesv2 from "@distilled.cloud/aws/sesv2";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { EmailTemplate } from "./EmailTemplate.ts";
5
6/**
7 * The `testRenderEmailTemplate` request with the binding-injected
8 * `TemplateName` removed — it comes from the bound template.
9 */
10export interface RenderEmailTemplateRequest extends Omit<
11 sesv2.TestRenderEmailTemplateRequest,
12 "TemplateName"
13> {}
14
15/**
16 * Runtime binding for `sesv2:TestRenderEmailTemplate`.
17 *
18 * Bind this operation to an `EmailTemplate` inside a function runtime to get
19 * a callable that renders the template server-side with the given
20 * personalization data — useful for previews and for validating template
21 * data before a send. The binding grants the function
22 * `ses:TestRenderEmailTemplate` scoped to the template.
23 * ### Rendering Templates
24 * **Example:** Render the Bound Template
25 * ```typescript
26 * // init
27 * const renderTemplate = yield* SES.RenderEmailTemplate(template);
28 *
29 * // runtime
30 * const { RenderedTemplate } = yield* renderTemplate({
31 * TemplateData: JSON.stringify({ name: "Ada" }),
32 * });
33 * ```
34 *
35 * @binding
36 */
37export interface RenderEmailTemplate extends Binding.Service<
38 RenderEmailTemplate,
39 "AWS.SES.RenderEmailTemplate",
40 <T extends EmailTemplate>(
41 template: T,
42 ) => Effect.Effect<
43 (
44 request: RenderEmailTemplateRequest,
45 ) => Effect.Effect<
46 sesv2.TestRenderEmailTemplateResponse,
47 sesv2.TestRenderEmailTemplateError
48 >
49 >
50> {}
51export const RenderEmailTemplate = Binding.Service<RenderEmailTemplate>(
52 "AWS.SES.RenderEmailTemplate",
53);