lib/requests/payments/sources/giro_pay.ex

defmodule Requests.Payments.Sources.GiroPay do
  @type info_field :: %{
          label: String.t(),
          text: String.t()
        }

  @type t :: %__MODULE__{
          type: String.t(),
          purpose: String.t(),
          info_fields: list(info_field())
        }

  @enforce_keys [:type, :purpose]
  defstruct [
    :type,
    :purpose,
    :info_fields
  ]

  def build(%{type: type, purpose: purpose, info_fields: info_fields}) do
    %{
      type: type,
      purpose: purpose,
      info_fields: info_fields
    }
  end

  def build(%{"type" => type, "purpose" => purpose, "info_fields" => info_fields}) do
    %{
      type: type,
      purpose: purpose,
      info_fields: info_fields
    }
  end

  def build(_), do: nil
end