lib/requests/payments/payment/sender.ex

defmodule Requests.Payments.Payment.Sender do
  @moduledoc false
  @type identification :: %{
          type: String.t(),
          number: String.t(),
          issuing_country: <<_::2>>
        }

  @type t :: %__MODULE__{
          type: String.t(),
          first_name: String.t(),
          last_name: String.t(),
          dob: String.t(),
          address: BillingAddress.t(),
          identification: identification()
        }

  @enforce_keys [:type, :first_name, :last_name, :address]
  defstruct [
    :type,
    :first_name,
    :last_name,
    :dob,
    :address,
    :identification,
    :reference
  ]

  def build(params) when is_map(params) do
    %{
      type: params[:type],
      first_name: params[:first_name],
      last_name: params[:last_name],
      dob: params[:dob],
      address: params[:address],
      identification: params[:identification],
      reference: params[:reference]
    }
  end

  def build(_), do: nil
end