lib/plaid/address.ex

defmodule Plaid.Address do
  @moduledoc """
  [Plaid Address schema.](https://plaid.com/docs/api/products/#identity-get-response-data)
  """

  @behaviour Plaid.Castable

  @type t :: %__MODULE__{
          city: String.t() | nil,
          region: String.t() | nil,
          street: String.t() | nil,
          postal_code: String.t() | nil,
          country: String.t() | nil
        }

  @derive Jason.Encoder
  defstruct [
    :city,
    :region,
    :street,
    :postal_code,
    :country
  ]

  @impl true
  def cast(generic_map) do
    %__MODULE__{
      city: generic_map["city"],
      region: generic_map["region"],
      street: generic_map["street"],
      postal_code: generic_map["postal_code"],
      country: generic_map["country"]
    }
  end
end