Skip to main content

lib/rujira/fin.ex

defmodule Rujira.Fin do
  @moduledoc """
  Public API for the FIN DEX protocol.

  Pure delegation facade. Each resource module owns its struct, construction,
  and queries. Invalidate cache on the resource module, not here.
  """

  alias Rujira.Fin.Book
  alias Rujira.Fin.Order
  alias Rujira.Fin.Pair
  alias Rujira.Fin.Range

  # --- Pair ---

  defdelegate get_pair(address), to: Pair, as: :get
  defdelegate list_pairs(), to: Pair, as: :list
  defdelegate get_stable_pair(denom), to: Pair, as: :find_stable
  defdelegate get_pair_from_denoms(base, quote_denom), to: Pair, as: :find_by_denoms
  defdelegate pair_from_id(id), to: Pair, as: :from_id
  defdelegate ticker_id!(pair), to: Pair
  defdelegate get_pair_tvl(address), to: Pair, as: :tvl

  # --- Book ---

  defdelegate load_pair(pair, limit \\ 75), to: Book, as: :load
  defdelegate book_from_id(id), to: Book, as: :from_id
  defdelegate book_price(id), to: Book, as: :price
  defdelegate book_depth(book, side, deviation), to: Book, as: :depth

  # --- Order ---

  defdelegate list_orders(pair, address, limit \\ 30), to: Order, as: :list
  defdelegate list_pair_orders(pair, opts), to: Order, as: :list_all
  defdelegate load_order(pair, side, price, owner), to: Order, as: :load
  defdelegate list_all_orders(address), to: Order, as: :list_all_pairs
  defdelegate order_from_id(id), to: Order, as: :from_id

  # --- Range ---

  defdelegate list_ranges(pair, address \\ nil, opts \\ []), to: Range, as: :list
  defdelegate load_range(pair, idx), to: Range, as: :load
  defdelegate list_all_ranges(address \\ nil, contracts \\ nil), to: Range, as: :list_all
  defdelegate range_from_id(id), to: Range, as: :from_id
  defdelegate range_tvl(pair), to: Range, as: :tvl
  defdelegate total_range_tvl(), to: Range, as: :total_tvl
end