ExEnv.Utils (ExEnv v0.3.5)
View SourceExEnv general utilities.
Summary
Functions
Returns :ok if config AST is acceptable, else raises exception.
Returns :ok if otp_app is acceptable, else raises exception.
Functions
Returns :ok if config AST is acceptable, else raises exception.
Example
iex> quote do [foo: 123] end |> ExEnv.Utils.validate_config_ast
:ok
iex> quote do [1, 2, 3] end |> ExEnv.Utils.validate_config_ast
:ok
iex> quote do %{hello: "world"} end |> ExEnv.Utils.validate_config_ast
:ok
iex> quote do {:hello, "world"} end |> ExEnv.Utils.validate_config_ast
:ok
iex> quote do {:hello, "world", 123} end |> ExEnv.Utils.validate_config_ast
:ok
iex> quote do [{Hello.World, [foo: "bar"]}] end |> ExEnv.Utils.validate_config_ast
:ok
iex> quote do %Date{year: 1990, month: 1, day: 1} end |> ExEnv.Utils.validate_config_ast
:ok
iex> quote do ~D[2026-09-09] end |> ExEnv.Utils.validate_config_ast
:ok
iex> quote do [starts_at: ~T[10:00:00], created_at: ~N[2026-09-09 10:00:00], deadline: ~U[2026-09-09 10:00:00Z]] end |> ExEnv.Utils.validate_config_ast
:ok
iex> quote do ~D[2026-09-09 Calendar.ISO] end |> ExEnv.Utils.validate_config_ast
:ok
iex> {:__aliases__, [], [Foo, "Bar"]} |> ExEnv.Utils.validate_config_ast
** (RuntimeError) wrong submodule "Bar" name in AST chunk {:__aliases__, [], [Foo, "Bar"]}
iex> quote do Foo.bar("hello") end |> ExEnv.Utils.validate_config_ast
** (RuntimeError) invalid or unsafe config AST {{:., [], [{:__aliases__, [alias: false], [:Foo]}, :bar]}, [], ["hello"]}
iex> quote do ~D[2026-09-09 Evil.Calendar] end |> ExEnv.Utils.validate_config_ast
** (RuntimeError) unsupported calendar Evil.Calendar in sigil ~D[2026-09-09 Evil.Calendar], only Calendar.ISO is allowed
iex> quote do ~D[2026-09-09]x end |> ExEnv.Utils.validate_config_ast
** (RuntimeError) sigil ~D[2026-09-09]x does not accept modifiers
iex> Code.string_to_quoted!("~s[hello]") |> ExEnv.Utils.validate_config_ast
** (RuntimeError) invalid or unsafe config AST {:sigil_s, [delimiter: "[", line: 1], [{:<<>>, [line: 1], ["hello"]}, []]}
Returns :ok if otp_app is acceptable, else raises exception.
Example
iex> ExEnv.Utils.validate_otp_app(:hello_world)
:ok
iex> ExEnv.Utils.validate_otp_app(:hello_123)
:ok
iex> ExEnv.Utils.validate_otp_app(:"123_hello")
** (RuntimeError) invalid OTP application name 123_hello
iex> ExEnv.Utils.validate_otp_app(:"Hello_World")
** (RuntimeError) invalid OTP application name Hello_World