lib/requests/payments/sources/id.ex

defmodule Requests.Payments.Sources.Id do
    @moduledoc false
  import Utilities, only: [atomize_keys: 1]

  @type t :: %__MODULE__{
          type: String.t(),
          id: String.t(),
          cvv: String.t(),
          payment_method: String.t()
        }

  @enforce_keys [:type, :id]
  defstruct [
    :type,
    :id,
    :cvv,
    :payment_method
  ]

  def build(raw_params) when is_map(raw_params) do
    params = atomize_keys(raw_params)

    %{
      type: "id",
      id: params[:id],
      cvv: params[:cvv],
      payment_method: params[:payment_method]
    }
  end

  def build(_), do: nil
end