lib/responses/instruments/create_bank_account.ex

defmodule Responses.Instruments.CreateBankAccount do
  alias Customers.Customer
  alias Instruments.Bank

  @derive Jason.Encoder

  @type t :: %__MODULE__{
          type: String.t(),
          id: String.t(),
          fingerprint: String.t(),
          customer: Customer.t(),
          bank: Bank.t(),
          swift_bic: String.t(),
          account_number: String.t(),
          bank_code: String.t(),
          iban: String.t()
        }

  defstruct [
    :type,
    :id,
    :fingerprint,
    :customer,
    :bank,
    :swift_bic,
    :account_number,
    :bank_code,
    :iban
  ]

  def build(params) when is_map(params) do
    %__MODULE__{
      type: params["type"],
      id: params["id"],
      fingerprint: params["fingerprint"],
      customer: Customer.build(params["customer"]),
      bank: Bank.build(params["bank"]),
      swift_bic: params["swift_bic"],
      account_number: params["account_number"],
      bank_code: params["bank_code"],
      iban: params["iban"]
    }
  end

  def build(_), do: nil
end