Packages
tai
0.0.36
0.0.75
0.0.74
0.0.73
0.0.72
0.0.71
0.0.70
0.0.69
0.0.68
0.0.67
0.0.66
0.0.65
0.0.64
0.0.63
0.0.62
0.0.61
0.0.60
0.0.59
0.0.58
0.0.57
0.0.56
0.0.55
0.0.54
0.0.53
0.0.52
0.0.51
0.0.50
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
A composable, real time, market data and trade execution toolkit
Current section
Files
Jump to
Current section
Files
lib/tai/symbol.ex
defmodule Tai.Symbol do
@moduledoc """
Transform symbols between tai and exchange formats
"""
def downcase(symbol) when is_atom(symbol) do
symbol
|> Atom.to_string()
|> String.downcase()
end
def downcase(symbol) do
symbol
|> String.downcase()
end
def downcase_all(symbols) do
symbols
|> Enum.map(&downcase(&1))
end
def upcase(symbol) when is_atom(symbol) do
symbol
|> Atom.to_string()
|> String.upcase()
end
def upcase(symbol) do
symbol
|> String.upcase()
end
@spec build(String.t(), String.t()) :: atom
def build(base_asset, quote_asset)
when is_binary(base_asset) and is_binary(quote_asset) do
"#{base_asset}_#{quote_asset}"
|> String.downcase()
|> String.to_atom()
end
def base_and_quote(symbol) when is_binary(symbol) do
assets = String.split(symbol, "_")
assets_count = Enum.count(assets)
if assets_count == 2 do
[base_asset, quote_asset] = Enum.map(assets, &String.to_atom/1)
{:ok, {base_asset, quote_asset}}
else
{:error, :symbol_format_must_be_base_quote}
end
end
def base_and_quote(symbol) when is_atom(symbol) do
symbol
|> Atom.to_string()
|> base_and_quote
end
def base_and_quote(_), do: {:error, :symbol_must_be_an_atom_or_string}
end