defmodule Instruments.Bank do @moduledoc false import Utilities, only: [atomize_keys: 1] alias Customers.BillingAddress @derive Jason.Encoder @type address :: %{ address_line1: String.t(), address_line2: String.t(), city: String.t(), country: <<_::2>>, state: <<_::2>>, zip: <<_::50>> } @type t() :: %__MODULE__{ address: address(), branch: String.t(), name: String.t() } defstruct [ :address, :branch, :name ] def build(raw_params) when is_map(raw_params) do params = atomize_keys(raw_params) %__MODULE__{ address: BillingAddress.build(params[:address]), branch: params[:branch], name: params[:name] } end def build(_), do: nil end