defmodule Circlex.Struct.Payout do
import Circlex.Struct.Util
alias Circlex.Struct.{Amount, SourceDest}
defstruct [
:id,
:source_wallet_id,
:destination,
:amount,
:fees,
:status,
:tracking_ref,
:risk_evaluation,
:adjustments,
:return,
:create_date,
:update_date,
:external_ref
]
def deserialize(payout) do
%__MODULE__{
id: fetch(payout, :id),
source_wallet_id: fetch(payout, :sourceWalletId),
destination: SourceDest.deserialize(fetch(payout, :destination)),
amount: Amount.deserialize(fetch(payout, :amount)),
fees: Amount.deserialize(fetch(payout, :fees)),
status: fetch(payout, :status),
tracking_ref: fetch(payout, :trackingRef),
risk_evaluation: fetch(payout, :riskEvaluation),
adjustments: fetch(payout, :adjustments),
return: fetch(payout, :return),
create_date: fetch(payout, :createDate),
update_date: fetch(payout, :updateDate),
external_ref: fetch(payout, :externalRef)
}
end
def serialize(payout, for_api \\ false) do
Map.merge(
%{
id: payout.id,
sourceWalletId: payout.source_wallet_id,
destination: SourceDest.serialize(payout.destination),
amount: Amount.serialize(payout.amount),
fees: Amount.serialize(payout.fees),
status: payout.status,
trackingRef: payout.tracking_ref,
createDate: payout.create_date,
updateDate: payout.update_date
},
if(for_api,
do: %{},
else: %{
externalRef: payout.external_ref,
riskEvaluation: payout.risk_evaluation,
adjustments: payout.adjustments,
return: payout.return
}
)
)
end
end