5 releases
0.1.3 | Jan 22, 2024 |
---|---|
0.1.2 | Jan 21, 2024 |
0.1.1 | Jan 21, 2024 |
0.1.0 | Jan 21, 2024 |
0.0.1 | Jan 21, 2024 |
#689 in Configuration
10KB
Config Generator
A derive macro for generating boilerplate code for a configuration struct in rust.
Installation and usage
To install this crate, add it as a dependency:
cargo add config-generator
Additionally, the serde and toml crates are required to support loading from toml.
cargo add serde toml
To use, define a struct containing configuration variable that will be loaded by the generated code. env_key
annotations define an environment variable key that will be used for loading the variable from the environment.
use config_generator::ConfigGenerator;
#[derive(ConfigGenerator, Default)]
struct Config {
#[env_key = "NAME_ENV_KEY"]
pub name: String,
#[env_key = "THREAD_COUNT"]
pub thread_count: u32,
#[env_key = "ALLOWED_ORIGINS"]
pub allowed_origins: Vec<String>,
#[env_key = "ASSETS_PATH"]
pub assets_path: Option<String>,
}
The resulting implementations will allow a config to be loaded from a toml file, the environment, or both, with loaded variables overwriting previously set ones. Note that you will need to implement a way to get some starting state for your config (probably either defining a new
method or deriving Default
as above).
// Loads a default config first from a toml file,
// then overlays environment variable values.
let config = Config::default()
.with_toml("path/to/config.toml")
.with_environment();
Features
By default, the load_toml
feature is enabled, supplying a with_toml
function implementation on the input struct, and consequently requiring the serde and toml crates. This feature can be disabled, and these crates removed, if the user so chooses.
Acknowledgements
This macro is inspired by a use-case for the optional_struct macro, which also doubles as a very useful resource for those wishing to learn about writing procedural macros in rust.
Dependencies
~240–690KB
~16K SLoC