lib/workbench_web/views/product_view.ex

defmodule WorkbenchWeb.ProductView do
  use WorkbenchWeb, :view

  @attrs ~w(
    venue_symbol
    alias
    base
    quote
    venue_base
    venue_quote
    type
    status
    listing
    expiry
    collateral
    collateral_weight
    price_increment
    size_increment
    min_price
    min_size
    max_price
    max_size
    min_notional
    value
    value_side
    is_quanto
    is_inverse
    maker_fee
    taker_fee
  )a
  def attrs, do: @attrs

  def pluck(attr, product), do: product |> Map.get(attr) |> format

  def format(nil), do: "-"
  def format(%Decimal{} = val), do: val |> decimal()
  def format(%DateTime{} = val), do: val |> relative_time()
  def format(val) when is_binary(val) or is_atom(val), do: val
end