lib/exbox/config.ex

defmodule Exbox.Config do
  @moduledoc """
  Exbox configuration module.
  All configurations have a default value, which can be overridden in the application config.
  The application config is keyed in the following way:
  ```elixir
  config :exbox, :features, [
    capture_telemetry_metric_events: true,
    capture_telemetry_log_events: false
  ]
  ```
  """

  @default_config %{
    capture_telemetry_metric_events: true,
    # default disabled until fully complete
    capture_telemetry_log_events: false
  }

  @doc """
  Returns the configuration for capture_telemetry_metric_events
  """
  @spec capture_telemetry_metric_events? :: boolean()
  def capture_telemetry_metric_events?, do: config_value(:capture_telemetry_metric_events)

  @doc """
  Returns the configuration for capture_telemetry_log_events
  """
  @spec capture_telemetry_log_events? :: boolean()
  def capture_telemetry_log_events?, do: config_value(:capture_telemetry_log_events)

  @doc """
  Returns the configuration value for the given key.
  """
  @spec config_value(atom()) :: any()
  def config_value(key) do
    case Application.get_env(:exbox, :features)[key] do
      nil -> Map.get(@default_config, key)
      value -> value
    end
  end
end