-module(plunk@transactional). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([send_transactional_email_decoder/0, send/2, decode/1]). -export_type([to/0, transactional_email/0, contact/0, email/0, send_transactional_email_response/0]). -type to() :: {address, binary()} | {addresses, list(binary())}. -type transactional_email() :: {transactional_email, to(), binary(), binary(), gleam@option:option(binary()), gleam@option:option(binary())}. -type contact() :: {contact, binary(), binary()}. -type email() :: {email, contact(), binary()}. -type send_transactional_email_response() :: {send_transactional_email_response, boolean(), list(email()), gleam@option:option(binary())}. -spec contact_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok, contact()} | {error, list(gleam@dynamic:decode_error())}). contact_decoder() -> gleam@dynamic:decode2( fun(Field@0, Field@1) -> {contact, Field@0, Field@1} end, gleam@dynamic:field(<<"id"/utf8>>, fun gleam@dynamic:string/1), gleam@dynamic:field(<<"email"/utf8>>, fun gleam@dynamic:string/1) ). -spec email_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok, email()} | {error, list(gleam@dynamic:decode_error())}). email_decoder() -> gleam@dynamic:decode2( fun(Field@0, Field@1) -> {email, Field@0, Field@1} end, gleam@dynamic:field(<<"contact"/utf8>>, contact_decoder()), gleam@dynamic:field(<<"email"/utf8>>, fun gleam@dynamic:string/1) ). -spec send_transactional_email_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok, send_transactional_email_response()} | {error, list(gleam@dynamic:decode_error())}). send_transactional_email_decoder() -> gleam@dynamic:decode3( fun(Field@0, Field@1, Field@2) -> {send_transactional_email_response, Field@0, Field@1, Field@2} end, gleam@dynamic:field(<<"success"/utf8>>, fun gleam@dynamic:bool/1), gleam@dynamic:field( <<"emails"/utf8>>, gleam@dynamic:list(email_decoder()) ), gleam@dynamic:optional_field( <<"timestamp"/utf8>>, fun gleam@dynamic:string/1 ) ). -spec send(plunk@instance:instance(), transactional_email()) -> gleam@http@request:request(binary()). send(Instance, Mail) -> Body = begin _pipe = [{<<"to"/utf8>>, case erlang:element(2, Mail) of {address, Addr} -> gleam@json:string(Addr); {addresses, Addrs} -> gleam@json:array(Addrs, fun gleam@json:string/1) end}, {<<"subject"/utf8>>, gleam@json:string(erlang:element(3, Mail))}, {<<"body"/utf8>>, gleam@json:string(erlang:element(4, Mail))}], _pipe@1 = plunk@internal@utils:omit_if_none( _pipe, <<"name"/utf8>>, erlang:element(5, Mail), fun gleam@json:string/1 ), _pipe@2 = plunk@internal@utils:omit_if_none( _pipe@1, <<"from"/utf8>>, erlang:element(6, Mail), fun gleam@json:string/1 ), _pipe@3 = gleam@json:object(_pipe@2), gleam@json:to_string(_pipe@3) end, _pipe@4 = Instance, plunk@internal@bridge:make_request(_pipe@4, <<"/send"/utf8>>, post, Body). -spec decode(gleam@http@response:response(binary())) -> {ok, send_transactional_email_response()} | {error, plunk@types:plunk_error()}. decode(Res) -> _pipe = Res, plunk@internal@bridge:decode(_pipe, fun send_transactional_email_decoder/0).