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/advisor_groups/parse_config.ex
defmodule Tai.AdvisorGroups.ParseConfig do
@type config :: Tai.Config.t()
@type advisor_group :: Tai.AdvisorGroup.t()
@type product :: Tai.Venues.Product.t()
@spec parse_config(config) :: {:ok, [advisor_group]} | {:error, map}
def parse_config(%Tai.Config{advisor_groups: advisor_groups}) do
{groups, errors} = advisor_groups |> Enum.reduce({[], %{}}, &build_group/2)
if Enum.empty?(errors), do: {:ok, groups}, else: {:error, errors}
end
defp build_group({id, config}, {groups, errors}) do
group = %Tai.AdvisorGroup{
id: id,
advisor: config |> Keyword.get(:advisor),
factory: config |> Keyword.get(:factory),
products: config |> Keyword.get(:products),
config: config |> Keyword.get(:config, %{}),
trades: config |> Keyword.get(:trades, [])
}
if Vex.valid?(group) do
new_groups = groups ++ [group]
{new_groups, errors}
else
group_errors =
group
|> Vex.errors()
|> Enum.map(fn {:error, k, _, m} -> {k, m} end)
new_errors = Map.put(errors, id, group_errors)
{groups, new_errors}
end
end
end