-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).