lib/workbench/config.ex

defmodule Workbench.Config do
  defstruct ~w(
    asset_aliases
    balance_snapshot
  )a
  use Vex.Struct
  alias __MODULE__

  @type asset :: Tai.Markets.Asset.symbol()
  @type t :: %Config{
          asset_aliases: %{asset => [asset]},
          balance_snapshot: map
        }

  # validates(:asset_aliases, presence: true)
  # validates(:balance_snapshot, presence: true)

  def parse(env \\ Application.get_all_env(:workbench)) do
    config = %Config{
      asset_aliases: Keyword.get(env, :asset_aliases, %{}),
      balance_snapshot: Keyword.get(env, :balance_snapshot, %{})
    }

    if Vex.valid?(config) do
      {:ok, config}
    else
      errors = Vex.errors(config)
      {:error, errors}
    end
  end

  def libcluster_topologies do
    Confex.get_env(:libcluster, :topologies, [])
  end
end