A solution to edge case values could be to allow the user to specify the truthy values, e.g.
config :my_app, :bool_value, System.get_env_as!("BOOL_VALUE", "false", as: :boolean, truthy_values: ["on", "true", "TRUE", "FIRE ME UP"]) I could also see separate functions for booleans and integers, but either works On Tuesday, February 18, 2025 at 11:07:50 AM UTC-5 dave.lu...@gmail.com wrote: > 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/bd3ee17d-28fc-4944-89b5-204eab7e6bfcn%40googlegroups.com.