lib/circlex/struct/payment.ex

defmodule Circlex.Struct.Payment do
  import Circlex.Struct.Util

  alias Circlex.Struct.{Amount, SourceDest}

  defstruct [
    :id,
    :type,
    :status,
    :description,
    :amount,
    :fees,
    :create_date,
    :update_date,
    :merchant_id,
    :merchant_wallet_id,
    :source,
    :refunds
  ]

  def deserialize(payment) do
    %__MODULE__{
      id: fetch(payment, :id),
      type: fetch(payment, :type),
      status: fetch(payment, :status),
      description: fetch(payment, :description),
      amount: Amount.deserialize(fetch(payment, :amount)),
      fees: Amount.deserialize(fetch(payment, :fees)),
      create_date: fetch(payment, :createDate),
      update_date: fetch(payment, :updateDate),
      merchant_id: fetch(payment, :merchantId),
      merchant_wallet_id: fetch(payment, :merchantWalletId),
      source: SourceDest.deserialize(fetch(payment, :source)),
      refunds: fetch(payment, :refunds)
    }
  end

  def serialize(payment = %__MODULE__{}) do
    %{
      id: payment.id,
      type: payment.type,
      status: payment.status,
      description: payment.description,
      amount: Amount.serialize(payment.amount),
      fees: Amount.serialize(payment.fees),
      createDate: payment.create_date,
      updateDate: payment.update_date,
      merchantId: payment.merchant_id,
      merchantWalletId: payment.merchant_wallet_id,
      source: SourceDest.serialize(payment.source),
      refunds: payment.refunds
    }
  end
end