Crates.io | twelf |
lib.rs | twelf |
version | 0.15.0 |
source | src |
created_at | 2020-11-11 20:10:13.80656 |
updated_at | 2024-03-11 09:39:05.888437 |
description | 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 a proc macro. |
homepage | https://github.com/bnjjj/twelf |
repository | https://github.com/bnjjj/twelf |
max_upload_size | |
id | 311362 |
size | 155,717 |
Twelf is a configuration solution for Rust including 12-Factor support. It is designed with
Layer
s 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
files{"data": ${MY_ENV_VAR:-the_default_value}}
exampleHashMap
structure with MY_VARIABLE="mykey=myvalue,mykey2=myvalue2"
and also array like MY_VARIABLE=first,second
thanks to envy.twelf@0.8
version)use twelf::{config, Layer};
#[config]
#[derive(Default)]
struct Conf {
test: String,
another: usize,
}
// Init configuration with layers, each layers override only existing fields
let config = Conf::with_layers(&[
Layer::Json("conf.json".into()),
Layer::Env(Some("PREFIX_".to_string()))
]).unwrap();
use twelf::{config, Layer};
#[config]
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::Command::new("test").args(&Conf::clap_args());
// Init configuration with layers, each layers override only existing fields
let config = Conf::with_layers(&[
Layer::Json("conf.json".into()),
Layer::Env(Some("PREFIX_".to_string())),
Layer::Clap(app.get_matches().clone())
]).unwrap();
// ... your application code
Check here for more examples.
Twelf supports crate features, if you only want support for json
, env
and toml
then you just have to add this to your Cargo.toml
twelf = { version = "0.11", default-features = false, features = ["json", "toml", "env"] }
default_trait
enables code for a layer that integrate fields derived with the [std::default::Default] trait.
custom_fn
enables code for a layer that allows a custom closure to be executed.
Default features are ["env", "clap", "shellexpand"]
Feel free to contribute to the twelf
project.
Enable all features when testing changes to the crate:
cargo test --all-features
config-rs
don't have clap support and it didn't use any proc-macros if you're not very fan of proc-macros.