defmodule Stellar.Horizon.TradeAggregation do @moduledoc """ Represents a `TradeAggregation` resource from Horizon API. """ @behaviour Stellar.Horizon.Resource alias Stellar.Horizon.Mapping @type t :: %__MODULE__{ timestamp: non_neg_integer(), trade_count: non_neg_integer(), base_volume: String.t(), counter_volume: String.t(), avg: String.t(), high: String.t(), high_r: map(), low: String.t(), low_r: map(), open: String.t(), open_r: map(), close: String.t(), close_r: map() } defstruct [ :timestamp, :trade_count, :base_volume, :counter_volume, :avg, :high, :high_r, :low, :low_r, :open, :open_r, :close, :close_r ] @rational_mapping [ n: :integer, d: :integer ] @mapping [ timestamp: :integer, trade_count: :integer, high_r: {:map, @rational_mapping}, low_r: {:map, @rational_mapping}, open_r: {:map, @rational_mapping}, close_r: {:map, @rational_mapping} ] @impl true def new(attrs, opts \\ []) def new(attrs, _opts) do %__MODULE__{} |> Mapping.build(attrs) |> Mapping.parse(@mapping) end end