defmodule Plaid.Account do @moduledoc """ [Plaid Account schema.](https://plaid.com/docs/api/accounts) """ @behaviour Plaid.Castable alias Plaid.Account.{Balances, HistoricalBalances} alias Plaid.Castable alias Plaid.Identity alias Plaid.Item alias Plaid.Transactions.Transaction @type t :: %__MODULE__{ account_id: String.t(), balances: Balances.t(), days_available: non_neg_integer() | nil, historical_balances: [HistoricalBalances.t()] | nil, mask: String.t() | nil, name: String.t(), official_name: String.t() | nil, type: String.t(), subtype: String.t(), transactions: [Transaction.t()] | nil, verification_status: String.t() | nil, item: Plaid.Item.t(), owners: [Plaid.Identity.t()] | nil, ownership_type: String.t() | nil } defstruct [ :account_id, :balances, :days_available, :historical_balances, :mask, :name, :official_name, :type, :subtype, :transactions, :verification_status, :item, :owners, :ownership_type ] @impl true def cast(generic_map) do %__MODULE__{ account_id: generic_map["account_id"], balances: Castable.cast(Balances, generic_map["balances"]), days_available: generic_map["days_available"], historical_balances: Castable.cast_list(HistoricalBalances, generic_map["historical_balances"]), mask: generic_map["mask"], name: generic_map["name"], official_name: generic_map["official_name"], type: generic_map["type"], subtype: generic_map["subtype"], transactions: Castable.cast_list(Transaction, generic_map["transactions"]), verification_status: generic_map["verification_status"], item: Castable.cast(Item, generic_map["item"]), owners: Castable.cast_list(Identity, generic_map["owners"]), ownership_type: generic_map["ownership_type"] } end end