lib/mailtrap/email/mailbox.ex

defmodule Mailtrap.Email.Mailbox do
  @moduledoc """
  Mailbox  struct

  Why mailbox?
  https://www.rfc-editor.org/rfc/rfc5322#section-3.4
  """

  @type t :: %__MODULE__{
          name: nil | String.t() | nil,
          email: nil | String.t() | any
        }

  defstruct name: nil,
            email: nil

  @doc """
  Builds Mailbox struct

  ## Examples
    iex> Mailtrap.Email.Mailbox.build(nil, "jane.doe@example.com")
    %Mailtrap.Email.Mailbox{email: "jane.doe@example.com"}

    iex> Mailtrap.Email.Mailbox.build("", "jane.doe@example.com")
    %Mailtrap.Email.Mailbox{email: "jane.doe@example.com"}

    iex> Mailtrap.Email.Mailbox.build("Jane", "jane.doe@example.com")
    %Mailtrap.Email.Mailbox{email: "jane.doe@example.com", name: "Jane"}
  """
  @spec build(String.t() | nil, String.t()) :: __MODULE__.t()
  def build(nil, address), do: %__MODULE__{email: address}
  def build("", address), do: %__MODULE__{email: address}

  def build(name, address) do
    %__MODULE__{email: address, name: name}
  end
end