Skip to content

Commit 36c1102

Browse files
committed
refactor(cfg): add :exs resolver source; fold Otel.pick into get_cfg
Otel resolves config.exs from an explicit keyword (it runs during runtime.exs boot, before app env exists) — the one resolution path not expressed by get_cfg. Add an {:exs, {kw, key}} source so that case lives in the central resolver; the bespoke 13-line pick/3 becomes a one-line delegate.
1 parent 06845f4 commit 36c1102

2 files changed

Lines changed: 9 additions & 15 deletions

File tree

lib/hyper/cfg.ex

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ defmodule Hyper.Cfg do
2727
end
2828

2929
@type source ::
30-
{:runtime, atom() | {module(), atom()}}
30+
{:exs, {keyword(), atom()}}
31+
| {:runtime, atom() | {module(), atom()}}
3132
| {:toml, String.t()}
3233
| {:default, term()}
3334

@@ -64,6 +65,10 @@ defmodule Hyper.Cfg do
6465
defp from({:default, value}), do: {:ok, value}
6566
defp from({:toml, path}), do: Hyper.Cfg.Toml.fetch(path)
6667

68+
# An explicit keyword list, used when config.exs is read by hand during
69+
# `config/runtime.exs` boot (before it reaches app env) — see `Hyper.Cfg.Otel`.
70+
defp from({:exs, {kw, key}}) when is_list(kw), do: Keyword.fetch(kw, key)
71+
6772
defp from({:runtime, {mod, key}}) do
6873
case Application.get_env(:hyper, mod) do
6974
kw when is_list(kw) -> Keyword.fetch(kw, key)

lib/hyper/cfg/otel.ex

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ defmodule Hyper.Cfg.Otel do
77
`config :opentelemetry_exporter`.
88
"""
99

10-
import Hyper.Cfg, only: [fetch_cfg: 1]
10+
import Hyper.Cfg, only: [get_cfg: 1]
1111

1212
@doc "Resolve the `:opentelemetry_exporter` options, or `:none`."
1313
@spec exporter_options(keyword()) :: {:ok, keyword()} | :none
@@ -28,20 +28,9 @@ defmodule Hyper.Cfg.Otel do
2828
end
2929
end
3030

31+
# config.exs (the explicit `exs` keyword, since we run during boot) > [otel] toml.
3132
@spec pick(keyword(), atom(), String.t()) :: term() | nil
32-
defp pick(exs, key, toml) do
33-
case Keyword.fetch(exs, key) do
34-
{:ok, v} ->
35-
v
36-
37-
:error ->
38-
case fetch_cfg(toml: toml),
39-
do: (
40-
{:ok, v} -> v
41-
:error -> nil
42-
)
43-
end
44-
end
33+
defp pick(exs, key, toml), do: get_cfg(exs: {exs, key}, toml: toml, default: nil)
4534

4635
@spec proto(term()) :: :http_protobuf | :grpc
4736
defp proto(p) when p in [:http_protobuf, :grpc], do: p

0 commit comments

Comments
 (0)