Twelf is a configuration solution for Rust including 12-Factor support. It is designed with
Layers in order to configure different sources and formats to build your configuration. The main goal is to be very simple using the proc macrotwelf::config.
For now it supports :
#[serde(default = ...)] coming from serde)TOML, YAML, JSON, DHALL, INI filesHashMap structure with MY_VARIABLE="mykey=myvalue,mykey2=myvalue2" and also array like MY_VARIABLE=first,second thanks to envy.```rust use twelf::{config, Layer};
struct Conf { test: String, another: usize, }
// Init configuration with layers, each layers override only existing fields let config = Conf::withlayers(&[ Layer::Json("conf.json".into()), Layer::Env(Some("PREFIX".to_string())) ]).unwrap(); ```
```rust use twelf::{config, Layer};
struct Conf { /// Here is an example of documentation which is displayed in clap test: String, another: usize, }
// Will generate global arguments for each of your fields inside your configuration struct let app = clap::App::new("test").args(&Conf::clap_args());
// Init configuration with layers, each layers override only existing fields let config = Conf::withlayers(&[ Layer::Json("conf.json".into()), Layer::Env(Some("PREFIX".tostring())), Layer::Clap(app.getmatches().clone()) ]).unwrap();
// ... your application code ```
If you don't want to include useless crates if you just use 2 of all available layers you can use features without default-features, example if you use only yaml and env layer.
toml
[dependencies]
twelf = { version = "0.1", default-features = false, features = ["yaml"] }
Check here for more examples.
#[serde(flatten)] when you use other type thanString` in sub typesconfig-rs don't have clap support and it didn't use any proc-macros if you're not very fan of proc-macros.