lib/tai/iex/commands/fees.ex

defmodule Tai.IEx.Commands.Fees do
  @moduledoc """
  Display the list of maker/taker fees for tradable products
  """

  import Tai.IEx.Commands.Table, only: [render!: 2]

  @header [
    "Venue",
    "Credential",
    "Symbol",
    "Maker",
    "Taker"
  ]

  @spec fees :: no_return
  def fees do
    Tai.Commander.fees()
    |> format_rows
    |> render!(@header)
  end

  defp format_rows(fees) do
    fees
    |> Enum.map(fn f ->
      [
        f.venue_id,
        f.credential_id,
        f.symbol,
        {f.maker, f.maker_type},
        {f.taker, f.taker_type}
      ]
      |> Enum.map(&format_col/1)
    end)
  end

  defp format_col({val, :percent}) do
    percent =
      val
      |> Decimal.mult(Decimal.new(100))
      |> Decimal.normalize()
      |> Decimal.to_string(:normal)

    "#{percent}%"
  end

  defp format_col({val, _type}) do
    val
    |> Decimal.normalize()
    |> Decimal.to_string(:normal)
  end

  defp format_col(val), do: val
end