[][src]Crate twelf

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 macro twelf::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 with MY_VARIABLE="mykey=myvalue,mykey2=myvalue2" and also array like MY_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

Examples

Simple with JSON and environment variables

use twelf::{config, Layer};

#[config]
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();

Example with clap support

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::App::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

Use features to improve compile time

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.

[dependencies]
twelf = { version = "0.1", default-features = false, features = ["yaml"] }

Enums

Error

Error generated when instantiate configuration

Layer

Layer to configure priority when instantiate configuration.

Attribute Macros

config