Current section
Files
Jump to
Current section
Files
src/plunk@transactional.erl
-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).