Current section
Files
Jump to
Current section
Files
src/gleesend@emails.erl
-module(gleesend@emails).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-define(FILEPATH, "src/gleesend/emails.gleam").
-export([with_bcc/2, with_cc/2, with_reply_to/2, with_html/2, with_text/2, create_email/4, to_request/1, to_response/2]).
-export_type([resend_email/0, send_email_error/0, success_response/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.
-type resend_email() :: {resend_email,
gleesend:resend(),
binary(),
list(binary()),
binary(),
gleam@option:option(list(binary())),
gleam@option:option(list(binary())),
gleam@option:option(list(binary())),
gleam@option:option(binary()),
gleam@option:option(binary())}.
-type send_email_error() :: bad_request_error | parse_response_body_error.
-type success_response() :: {success_response, binary()}.
-file("src/gleesend/emails.gleam", 23).
-spec with_bcc(resend_email(), list(binary())) -> resend_email().
with_bcc(Resend, Bcc) ->
_record = Resend,
{resend_email,
erlang:element(2, _record),
erlang:element(3, _record),
erlang:element(4, _record),
erlang:element(5, _record),
{some, Bcc},
erlang:element(7, _record),
erlang:element(8, _record),
erlang:element(9, _record),
erlang:element(10, _record)}.
-file("src/gleesend/emails.gleam", 27).
-spec with_cc(resend_email(), list(binary())) -> resend_email().
with_cc(Resend, Cc) ->
_record = Resend,
{resend_email,
erlang:element(2, _record),
erlang:element(3, _record),
erlang:element(4, _record),
erlang:element(5, _record),
erlang:element(6, _record),
{some, Cc},
erlang:element(8, _record),
erlang:element(9, _record),
erlang:element(10, _record)}.
-file("src/gleesend/emails.gleam", 31).
-spec with_reply_to(resend_email(), list(binary())) -> resend_email().
with_reply_to(Resend, Reply_to) ->
_record = Resend,
{resend_email,
erlang:element(2, _record),
erlang:element(3, _record),
erlang:element(4, _record),
erlang:element(5, _record),
erlang:element(6, _record),
erlang:element(7, _record),
{some, Reply_to},
erlang:element(9, _record),
erlang:element(10, _record)}.
-file("src/gleesend/emails.gleam", 35).
-spec with_html(resend_email(), binary()) -> resend_email().
with_html(Resend, Html) ->
_record = Resend,
{resend_email,
erlang:element(2, _record),
erlang:element(3, _record),
erlang:element(4, _record),
erlang:element(5, _record),
erlang:element(6, _record),
erlang:element(7, _record),
erlang:element(8, _record),
{some, Html},
erlang:element(10, _record)}.
-file("src/gleesend/emails.gleam", 39).
-spec with_text(resend_email(), binary()) -> resend_email().
with_text(Resend, Text) ->
_record = Resend,
{resend_email,
erlang:element(2, _record),
erlang:element(3, _record),
erlang:element(4, _record),
erlang:element(5, _record),
erlang:element(6, _record),
erlang:element(7, _record),
erlang:element(8, _record),
erlang:element(9, _record),
{some, Text}}.
-file("src/gleesend/emails.gleam", 43).
-spec create_email(gleesend:resend(), binary(), list(binary()), binary()) -> resend_email().
create_email(Client, From, To, Subject) ->
{resend_email, Client, From, To, Subject, none, none, none, none, none}.
-file("src/gleesend/emails.gleam", 72).
-spec to_request(resend_email()) -> gleam@http@request:request(binary()).
to_request(Email) ->
Request@1 = case gleam@http@request:to(
<<"https://api.resend.com/emails"/utf8>>
) of
{ok, Request} -> Request;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"gleesend/emails"/utf8>>,
function => <<"to_request"/utf8>>,
line => 73,
value => _assert_fail,
start => 1538,
'end' => 1606,
pattern_start => 1549,
pattern_end => 1560})
end,
Body = gleam@json:object(
gleam@list:flatten(
[[{<<"from"/utf8>>, gleam@json:string(erlang:element(3, Email))},
{<<"to"/utf8>>,
gleam@json:array(
erlang:element(4, Email),
fun(A) -> gleam@json:string(A) end
)},
{<<"subject"/utf8>>,
gleam@json:string(erlang:element(5, Email))}],
case erlang:element(6, Email) of
{some, Bcc} ->
[{<<"bcc"/utf8>>,
gleam@json:array(
Bcc,
fun(A@1) -> gleam@json:string(A@1) end
)}];
none ->
[]
end,
case erlang:element(7, Email) of
{some, Cc} ->
[{<<"cc"/utf8>>,
gleam@json:array(
Cc,
fun(A@2) -> gleam@json:string(A@2) end
)}];
none ->
[]
end,
case erlang:element(8, Email) of
{some, Reply_to} ->
[{<<"reply_to"/utf8>>,
gleam@json:array(
Reply_to,
fun(A@3) -> gleam@json:string(A@3) end
)}];
none ->
[]
end,
case erlang:element(9, Email) of
{some, Html} ->
[{<<"html"/utf8>>, gleam@json:string(Html)}];
none ->
[]
end,
case erlang:element(10, Email) of
{some, Text} ->
[{<<"text"/utf8>>, gleam@json:string(Text)}];
none ->
[]
end]
)
),
_pipe = Request@1,
_pipe@1 = gleam@http@request:prepend_header(
_pipe,
<<"accept"/utf8>>,
<<"application/vnd.hmrc.1.0+json"/utf8>>
),
_pipe@2 = gleam@http@request:prepend_header(
_pipe@1,
<<"Content-Type"/utf8>>,
<<"application/json"/utf8>>
),
_pipe@3 = gleam@http@request:prepend_header(
_pipe@2,
<<"Authorization"/utf8>>,
<<"Bearer "/utf8, (erlang:element(2, erlang:element(2, Email)))/binary>>
),
_pipe@4 = gleam@http@request:set_method(_pipe@3, post),
gleam@http@request:set_body(
_pipe@4,
begin
_pipe@5 = Body,
gleam@json:to_string(_pipe@5)
end
).
-file("src/gleesend/emails.gleam", 120).
?DOC(" Takes in the string body of the response and the status returned by your http library of choice\n").
-spec to_response(binary(), integer()) -> {ok, success_response()} |
{error, send_email_error()}.
to_response(Body, Status) ->
Body_decoder = begin
gleam@dynamic@decode:field(
<<"id"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Id) -> gleam@dynamic@decode:success({success_response, Id}) end
)
end,
case Status of
200 ->
case gleam@json:parse(Body, Body_decoder) of
{ok, Body@1} ->
{ok, Body@1};
{error, _} ->
{error, parse_response_body_error}
end;
_ ->
{error, bad_request_error}
end.