lib/requests/payments/sources/ideal.ex

defmodule Requests.Payments.Sources.Ideal do
  @type t :: %__MODULE__{
          type: String.t(),
          description: String.t(),
          bic: String.t(),
          language: String.t()
        }

  @enforce_keys [:type, :description, :bic]
  defstruct [
    :type,
    :description,
    :bic,
    :language
  ]

  def build(%{type: type, description: description, bic: bic} = params) do
    %{
      type: type,
      description: description,
      bic: bic,
      language: params[:language]
    }
  end

  def build(%{"type" => type, "description" => description, "bic" => bic} = params) do
    %{
      type: type,
      description: description,
      bic: bic,
      language: params["language"]
    }
  end

  def build(_), do: nil
end