defmodule Circlex.Struct.Wallet do import Circlex.Struct.Util defstruct [:wallet_id, :entity_id, :type, :description, :balances, :addresses] def deserialize(wallet) do %__MODULE__{ wallet_id: fetch(wallet, :walletId), entity_id: fetch(wallet, :entityId), description: fetch(wallet, :description), type: fetch(wallet, :type), balances: fetch(wallet, :balances) |> Enum.map(&Circlex.Struct.Amount.deserialize/1), addresses: (fetch(wallet, :addresses) || []) |> Enum.map(&Circlex.Struct.Address.deserialize/1) } end def serialize(wallet, include_addresses \\ true) do Map.merge( %{ walletId: wallet.wallet_id, entityId: wallet.entity_id, description: wallet.description, type: wallet.type, balances: Enum.map(wallet.balances, &Circlex.Struct.Amount.serialize/1) }, if(include_addresses, do: %{addresses: Enum.map(wallet.addresses, &Circlex.Struct.Address.serialize/1)}, else: %{} ) ) end # TODO: Test def get_balance(wallet, currency) do balance = Enum.find_value(wallet.balances, fn balance -> if balance.currency == currency, do: balance, else: nil end) case balance do nil -> "0.00" _ -> balance.amount end end end