Twelf
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 :
- Default settings (inside your codebase with
#[serde(default = ...)]
coming from serde) - Reading from
TOML
,YAML
,JSON
,DHALL
,INI
files - Reading from environment variables: it supports
HashMap
structure withMY_VARIABLE="mykey=myvalue,mykey2=myvalue2"
and also array likeMY_VARIABLE=first,second
thanks to envy. - All serde attributes can be used in your struct to customize your configuration as you wish
- Reading your configuration from your command line built with clap (ATTENTION: if you're using version < v3 use the
twelf@1.8
version)
Usage
Simple with JSON and environment variables
use ;
// Init configuration with layers, each layers override only existing fields
let config = with_layers.unwrap;
Example with clap support
use ;
// Will generate global arguments for each of your fields inside your configuration struct
let app = new.args;
// Init configuration with layers, each layers override only existing fields
let config = with_layers.unwrap;
// ... your application code
Check here for more examples.
Features
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
= { = "0.3", = false, = ["json", "toml", "env"] }
Default features are ["env", "clap"]
Contributing
Feel free to contribute to the twelf
project.
Enable all features when testing changes to the crate:
cargo test --all-features
Alternatives
- config-rs is almost doing the same except the environment layer (for example we support hashmap and array in environment variables). Also
config-rs
don't have clap support and it didn't use any proc-macros if you're not very fan of proc-macros.