defmodule Responses.Instruments.BankAccountDetails do
alias Customers.AccountHolder
alias Instruments.Bank
@derive Jason.Encoder
@type t() :: %__MODULE__{
account_holder: AccountHolder.t(),
account_number: String.t(),
account_type: String.t(),
bank: Bank.t(),
bban: String.t(),
bank_code: String.t(),
branch_code: String.t(),
country: <<_::2>>,
currency: <<_::3>>,
customer: %{
default: true | false,
email: String.t(),
id: String.t(),
name: String.t()
},
fingerprint: String.t(),
iban: String.t(),
id: String.t(),
swift_bic: String.t(),
type: String.t()
}
defstruct [
:account_holder,
:account_number,
:account_type,
:bank,
:bban,
:bank_code,
:branch_code,
:country,
:currency,
:customer,
:fingerprint,
:iban,
:id,
:swift_bic,
:type
]
def build(params) when is_map(params) do
%__MODULE__{
account_holder: AccountHolder.build(params["account_holder"]),
account_number: params["account_number"],
account_type: params["account_type"],
bank: Bank.build(params["bank"]),
bban: params["bban"],
bank_code: params["bank_code"],
branch_code: params["branch_code"],
country: params["country"],
currency: params["currency"],
customer: build_customer(params["customer"]),
fingerprint: params["fingerprint"],
iban: params["iban"],
id: params["id"],
swift_bic: params["swift_bic"],
type: params["type"]
}
end
def build(_), do: nil
defp build_customer(params) when is_map(params) do
%{
default: params["default"],
email: params["email"],
id: params["id"],
name: params["name"]
}
end
defp build_customer(_), do: nil
end