defmodule Polymarket.Schemas.FeeSchedule do @moduledoc """ Fee schedule for a market. Part of a NewMarketEvent. """ use TypedEctoSchema alias Polymarket.JsonUtil alias Polymarket.Schemas.Coerce @primary_key false @derive Jason.Encoder typed_embedded_schema do field(:exponent, :float) field(:rate, :float) field(:rebate_rate, :float) field(:taker_only, :boolean) end @doc "Builds a `FeeSchedule` from a decoded (JSON) map, coercing each field." @spec from_attrs(map()) :: {:ok, t()} def from_attrs(attrs) do attrs = JsonUtil.snake_case_keys(attrs) {:ok, %__MODULE__{ exponent: Coerce.to_float(attrs["exponent"]), rate: Coerce.to_float(attrs["rate"]), rebate_rate: Coerce.to_float(attrs["rebate_rate"]), taker_only: attrs["taker_only"] }} end end