lib/horizon/order_book.ex

defmodule Stellar.Horizon.OrderBook do
  @moduledoc """
  Represents an `OrderBook` resource from Horizon API.
  """

  @behaviour Stellar.Horizon.Resource

  alias Stellar.Horizon.Mapping
  alias Stellar.Horizon.OrderBook.Price

  @type t :: %__MODULE__{
          bids: list(Price.t()),
          asks: list(Price.t()),
          base: map(),
          counter: map()
        }

  defstruct [
    :bids,
    :asks,
    :base,
    :counter
  ]

  @mapping [
    bids: {:list, :struct, Price},
    asks: {:list, :struct, Price}
  ]

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

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