-module(sendr@message).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/sendr/message.gleam").
-export([new/0, set_from/2, set_reply_to/2, set_to/2, set_cc/2, set_bcc/2, set_subject/2, set_attachments/2, set_body/2]).
-export_type([message/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(
" A simple message to be used with Mail Submission Agents. We do not adhere\n"
" to specific RFC guidelines. E.g. Reply-To, Cc and Bcc are not able to\n"
" utilize Group-addresses.\n"
).
-type message() :: {message,
gleam@option:option(sendr@message@mailbox:mailbox()),
gleam@option:option(list(sendr@message@mailbox:mailbox())),
gleam@option:option(list(sendr@message@mailbox:mailbox())),
gleam@option:option(list(sendr@message@mailbox:mailbox())),
gleam@option:option(list(sendr@message@mailbox:mailbox())),
gleam@option:option(binary()),
list(sendr@message@attachment:attachment()),
sendr@message@body:body()}.
-file("src/sendr/message.gleam", 25).
?DOC(" Creates a fresh message that is empty.\n").
-spec new() -> message().
new() ->
{message, none, none, none, none, none, none, [], {body, none, none}}.
-file("src/sendr/message.gleam", 42).
?DOC(
" Specifies the author(s) of the message, that is, the mailbox(es) of the\n"
" person(s) or system(s) responsible for the writing of the message.\n"
"\n"
" See: [RFC 5322, section 3.6.2](https://tools.ietf.org/html/rfc5322#section-3.6.2).\n"
).
-spec set_from(message(), sendr@message@mailbox:mailbox()) -> message().
set_from(Message, Mailbox) ->
{message,
{some, Mailbox},
erlang:element(3, Message),
erlang:element(4, Message),
erlang:element(5, Message),
erlang:element(6, Message),
erlang:element(7, Message),
erlang:element(8, Message),
erlang:element(9, Message)}.
-file("src/sendr/message.gleam", 50).
?DOC(
" Indicates the mailbox(es) to which the author of the message suggests\n"
" that replies be sent.\n"
"\n"
" See: [RFC 5322, section 3.6.2](https://tools.ietf.org/html/rfc5322#section-3.6.2).\n"
).
-spec set_reply_to(message(), list(sendr@message@mailbox:mailbox())) -> message().
set_reply_to(Message, Mailboxes) ->
{message,
erlang:element(2, Message),
{some, Mailboxes},
erlang:element(4, Message),
erlang:element(5, Message),
erlang:element(6, Message),
erlang:element(7, Message),
erlang:element(8, Message),
erlang:element(9, Message)}.
-file("src/sendr/message.gleam", 60).
?DOC(
" Contains the address(es) of the primary recipient(s) of the message.\n"
"\n"
" See: [RFC 5322, section 3.6.3](https://tools.ietf.org/html/rfc5322#section-3.6.3).\n"
).
-spec set_to(message(), list(sendr@message@mailbox:mailbox())) -> message().
set_to(Message, Mailboxes) ->
{message,
erlang:element(2, Message),
erlang:element(3, Message),
{some, Mailboxes},
erlang:element(5, Message),
erlang:element(6, Message),
erlang:element(7, Message),
erlang:element(8, Message),
erlang:element(9, Message)}.
-file("src/sendr/message.gleam", 68).
?DOC(
" (Carbon Copy) Contains the addresses of others who are to receive the\n"
" message, though the content of the message may not be directed at them.\n"
"\n"
" See: [RFC 5322, section 3.6.3](https://tools.ietf.org/html/rfc5322#section-3.6.3).\n"
).
-spec set_cc(message(), list(sendr@message@mailbox:mailbox())) -> message().
set_cc(Message, Mailboxes) ->
{message,
erlang:element(2, Message),
erlang:element(3, Message),
erlang:element(4, Message),
{some, Mailboxes},
erlang:element(6, Message),
erlang:element(7, Message),
erlang:element(8, Message),
erlang:element(9, Message)}.
-file("src/sendr/message.gleam", 77).
?DOC(
" (Blind Carbon Copy) Contains addresses of recipients of the message\n"
" whose addresses are not to be revealed to other recipients of the\n"
" message.\n"
"\n"
" See: [RFC 5322, section 3.6.3](https://tools.ietf.org/html/rfc5322#section-3.6.3).\n"
).
-spec set_bcc(message(), list(sendr@message@mailbox:mailbox())) -> message().
set_bcc(Message, Mailboxes) ->
{message,
erlang:element(2, Message),
erlang:element(3, Message),
erlang:element(4, Message),
erlang:element(5, Message),
{some, Mailboxes},
erlang:element(7, Message),
erlang:element(8, Message),
erlang:element(9, Message)}.
-file("src/sendr/message.gleam", 88).
?DOC(
" Sets the subject of the message.\n"
"\n"
" The subject is a brief summary or title of the message content. It is\n"
" typically displayed in the recipient's mailbox and helps them understand the\n"
" purpose or topic of the message.\n"
"\n"
" See: [RFC 5322, section 3.6.5](https://tools.ietf.org/html/rfc5322#section-3.6.5).\n"
).
-spec set_subject(message(), binary()) -> message().
set_subject(Message, Subject) ->
{message,
erlang:element(2, Message),
erlang:element(3, Message),
erlang:element(4, Message),
erlang:element(5, Message),
erlang:element(6, Message),
{some, Subject},
erlang:element(8, Message),
erlang:element(9, Message)}.
-file("src/sendr/message.gleam", 98).
?DOC(
" Set attachments on the message, replacing any existing attachments.\n"
"\n"
" Attachments allow the sender to include additional files or data with the\n"
" message. This function replaces the list of existing attachments in the message.\n"
"\n"
" See: [RFC 2045](https://tools.ietf.org/html/rfc2045).\n"
).
-spec set_attachments(message(), list(sendr@message@attachment:attachment())) -> message().
set_attachments(Message, Attachments) ->
{message,
erlang:element(2, Message),
erlang:element(3, Message),
erlang:element(4, Message),
erlang:element(5, Message),
erlang:element(6, Message),
erlang:element(7, Message),
Attachments,
erlang:element(9, Message)}.
-file("src/sendr/message.gleam", 108).
?DOC(
" Set the body of the message, replacing the existing body.\n"
"\n"
" See: [RFC 2045](https://tools.ietf.org/html/rfc2045).\n"
).
-spec set_body(message(), sendr@message@body:body()) -> message().
set_body(Message, Body) ->
{message,
erlang:element(2, Message),
erlang:element(3, Message),
erlang:element(4, Message),
erlang:element(5, Message),
erlang:element(6, Message),
erlang:element(7, Message),
erlang:element(8, Message),
Body}.