lib/tai/venue_adapters/binance/maker_taker_fees.ex

defmodule Tai.VenueAdapters.Binance.MakerTakerFees do
  def maker_taker_fees(_venue_id, _credential_id, credentials) do
    venue_credentials = struct!(ExBinance.Credentials, credentials)

    with {:ok, account} <- ExBinance.Spot.Private.account(venue_credentials) do
      percent_factor = Decimal.new(10_000)
      maker = account.maker_commission |> Decimal.new() |> Decimal.div(percent_factor)
      taker = account.taker_commission |> Decimal.new() |> Decimal.div(percent_factor)
      {:ok, {maker, taker}}
    else
      {:error, :receive_window} = error ->
        error

      {:error, {:binance_error, %{"code" => -2014, "msg" => "API-key format invalid." = reason}}} ->
        {:error, {:credentials, reason}}

      {:error, {:http_error, %HTTPoison.Error{reason: "timeout"}}} ->
        {:error, :timeout}
    end
  end
end