Packages
tai
0.0.17
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/settings.ex
defmodule Tai.Settings do
@moduledoc """
Global settings
"""
use GenServer
@enforce_keys [:send_orders]
defstruct [:send_orders]
def start_link(%Tai.Settings{} = settings) do
{:ok, pid} = GenServer.start_link(__MODULE__, settings, name: __MODULE__)
GenServer.call(pid, :create_ets_table)
{:ok, pid}
end
def init(state) do
{:ok, state}
end
def handle_call(:create_ets_table, _from, state) do
create_ets_table()
upsert_items(state)
{:reply, :ok, state}
end
def handle_call({:set_send_orders, val}, _from, state) do
:ets.insert(__MODULE__, {:send_orders, val})
{:reply, :ok, state}
end
def all do
[{:send_orders, send_orders}] = :ets.lookup(__MODULE__, :send_orders)
%Tai.Settings{
send_orders: send_orders
}
end
def disable_send_orders! do
GenServer.call(__MODULE__, {:set_send_orders, false})
end
def enable_send_orders! do
GenServer.call(__MODULE__, {:set_send_orders, true})
end
def send_orders? do
[{:send_orders, send_orders}] = :ets.lookup(__MODULE__, :send_orders)
send_orders
end
def from_config(%Tai.Config{} = config) do
%Tai.Settings{send_orders: config.send_orders}
end
defp create_ets_table do
:ets.new(__MODULE__, [:set, :protected, :named_table])
end
defp upsert_items(settings) do
settings
|> Map.to_list()
|> Enum.filter(fn {k, _} -> k != :__struct__ end)
|> Enum.each(fn item -> :ets.insert(__MODULE__, item) end)
end
end