In Elixir applications, config/runtime.exs is often used to parse 
environment variables from System.get_env2/ and friends, and convert into 
Application configuration.

Since environment variables can only be strings, it is often necessary to 
cast from string values into booleans and integer values. E.g.

config :my_app, :bool_value, System.get_env("BOOL_VALUE") == "true"

config :my_app, :int_value, String.to_string(System.get_env("INT_VALUE", 
"5"))

While there are entire libraries that deal with advanced runtime 
configuration, like Vapor <https://github.com/elixir-toniq/vapor> and 
elixir-specify <https://github.com/Qqwy/elixir-specify>, I believe there is 
an opportunity to simplify common patterns and duplicative code in Elixir 
configuration that often leads to confusion and edge case issues.

My proposal is to add parsing for both booleans and integers to environment 
variable parsing. As an example:

config :my_app, :bool_value, System.get_env_as!("BOOL_VALUE", "false", as: 
:boolean)

config :my_app, :int_value, System.get_env_as!("INT_VALUE", "5", as: 
:integer)

The trickiness would be in the acceptable range of edge case values. For 
example, "1" and "0" are often used for boolean values, in addition to 
"TRUE" and "FALSE". I believe there could be a reasonable compromise and 
appropriate documentation for addressing these issues.

More complex parsing, such as floats and custom data types would not be 
supported.

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/elixir-lang-core/03c630fb-affc-4f80-a7c8-6e4a694b8406n%40googlegroups.com.

Reply via email to