lib/circlex/struct/physical_address.ex

defmodule Circlex.Struct.PhysicalAddress do
  @moduledoc """
  Transfer beneficiaries need a physical address for travel rule requirements
  References: https://www.circle.com/blog/introducing-the-travel-rule-universal-solution-technology
  """
  use Circlex.Struct.JasonHelper
  import Circlex.Struct.Util

  defstruct [:line1, :line2, :city, :district, :postal_code, :country]

  def deserialize(physical_address) do
    %__MODULE__{
      line1: fetch(physical_address, :line1),
      line2: fetch(physical_address, :line2),
      city: fetch(physical_address, :city),
      district: fetch(physical_address, :district),
      postal_code: fetch(physical_address, :postalCode),
      country: fetch(physical_address, :country)
    }
  end

  def serialize(physical_address) do
    %{
      line1: physical_address.line1,
      line2: physical_address.line2,
      city: physical_address.city,
      district: physical_address.district,
      postalCode: physical_address.postal_code,
      country: physical_address.country
    }
  end
end