-module(lightspeed@integration@mail).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/lightspeed/integration/mail.gleam").
-export([transactional_pattern/0, digest_pattern/0, local_dev_pattern/0, valid/1, backend_label/1, signature/1, backend/1, name/1]).
-export_type([mail_backend/0, delivery_policy/0, pattern/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(" Mail integration patterns for ecosystem compatibility (M26).\n").
-type mail_backend() :: in_memory_outbox |
{swoosh_bridge, binary()} |
{mixed_mail, binary(), binary()}.
-type delivery_policy() :: {delivery_policy, integer(), boolean(), boolean()}.
-type pattern() :: {pattern, binary(), mail_backend(), delivery_policy()}.
-file("src/lightspeed/integration/mail.gleam", 27).
?DOC(" Transactional-mail integration pattern.\n").
-spec transactional_pattern() -> pattern().
transactional_pattern() ->
{pattern,
<<"transactional_mail"/utf8>>,
{swoosh_bridge, <<"MyApp.Mailer"/utf8>>},
{delivery_policy, 5, true, true}}.
-file("src/lightspeed/integration/mail.gleam", 40).
?DOC(" Mixed-runtime digest-mail pattern.\n").
-spec digest_pattern() -> pattern().
digest_pattern() ->
{pattern,
<<"digest_mail"/utf8>>,
{mixed_mail, <<"Swoosh"/utf8>>, <<"GleamOutbox"/utf8>>},
{delivery_policy, 3, true, true}}.
-file("src/lightspeed/integration/mail.gleam", 53).
?DOC(" Local development mail pattern.\n").
-spec local_dev_pattern() -> pattern().
local_dev_pattern() ->
{pattern,
<<"local_dev_mail"/utf8>>,
in_memory_outbox,
{delivery_policy, 1, true, true}}.
-file("src/lightspeed/integration/mail.gleam", 106).
-spec backend_valid(mail_backend()) -> boolean().
backend_valid(Backend) ->
case Backend of
in_memory_outbox ->
true;
{swoosh_bridge, Module} ->
Module /= <<""/utf8>>;
{mixed_mail, Primary, Fallback} ->
(Primary /= <<""/utf8>>) andalso (Fallback /= <<""/utf8>>)
end.
-file("src/lightspeed/integration/mail.gleam", 66).
?DOC(" Validate mail integration constraints.\n").
-spec valid(pattern()) -> boolean().
valid(Pattern) ->
((backend_valid(erlang:element(3, Pattern)) andalso (erlang:element(
2,
erlang:element(4, Pattern)
)
> 0))
andalso erlang:element(3, erlang:element(4, Pattern)))
andalso erlang:element(4, erlang:element(4, Pattern)).
-file("src/lightspeed/integration/mail.gleam", 74).
?DOC(" Stable backend label.\n").
-spec backend_label(mail_backend()) -> binary().
backend_label(Backend) ->
case Backend of
in_memory_outbox ->
<<"in_memory_outbox"/utf8>>;
{swoosh_bridge, Module} ->
<<"swoosh_bridge:"/utf8, Module/binary>>;
{mixed_mail, Primary, Fallback} ->
<<<<<<"mixed_mail:"/utf8, Primary/binary>>/binary, ":"/utf8>>/binary,
Fallback/binary>>
end.
-file("src/lightspeed/integration/mail.gleam", 114).
-spec bool_label(boolean()) -> binary().
bool_label(Value) ->
case Value of
true ->
<<"true"/utf8>>;
false ->
<<"false"/utf8>>
end.
-file("src/lightspeed/integration/mail.gleam", 83).
?DOC(" Stable pattern signature.\n").
-spec signature(pattern()) -> binary().
signature(Pattern) ->
<<<<<<<<<<<<<<<<<<"mail:"/utf8, (erlang:element(2, Pattern))/binary>>/binary,
"|backend="/utf8>>/binary,
(backend_label(erlang:element(3, Pattern)))/binary>>/binary,
"|max_retries="/utf8>>/binary,
(erlang:integer_to_binary(
erlang:element(2, erlang:element(4, Pattern))
))/binary>>/binary,
"|idempotency_key_required="/utf8>>/binary,
(bool_label(erlang:element(3, erlang:element(4, Pattern))))/binary>>/binary,
"|tenant_header_required="/utf8>>/binary,
(bool_label(erlang:element(4, erlang:element(4, Pattern))))/binary>>.
-file("src/lightspeed/integration/mail.gleam", 97).
?DOC(" Pattern backend.\n").
-spec backend(pattern()) -> mail_backend().
backend(Pattern) ->
erlang:element(3, Pattern).
-file("src/lightspeed/integration/mail.gleam", 102).
?DOC(" Pattern name.\n").
-spec name(pattern()) -> binary().
name(Pattern) ->
erlang:element(2, Pattern).