lib/horizon/liquidity_pool.ex

defmodule Stellar.Horizon.LiquidityPool do
  @moduledoc """
  Represents a `LiquidityPool` resource from Horizon API.
  """

  @behaviour Stellar.Horizon.Resource

  alias Stellar.Horizon.Mapping

  @type t :: %__MODULE__{
          id: String.t(),
          paging_token: String.t(),
          fee_bp: non_neg_integer(),
          type: String.t(),
          total_trustlines: non_neg_integer(),
          total_shares: String.t(),
          reserves: list(map()),
          last_modified_ledger: non_neg_integer(),
          last_modified_time: DateTime.t()
        }

  defstruct [
    :id,
    :paging_token,
    :fee_bp,
    :type,
    :total_trustlines,
    :total_shares,
    :reserves,
    :last_modified_ledger,
    :last_modified_time
  ]

  @mapping [
    fee_bp: :integer,
    total_trustlines: :integer,
    last_modified_ledger: :integer,
    last_modified_time: :date_time
  ]

  @impl true
  def new(attrs, opts \\ [])

  def new(attrs, _opts) do
    %__MODULE__{}
    |> Mapping.build(attrs)
    |> Mapping.parse(@mapping)
  end
end