Skip to content

leptonyu/cfg-rs

Repository files navigation

cfg-rs: A Configuration Library for Rust Applications

Crates.io Crates.io Documentation dependency status License Actions Status Minimum supported Rust version

Major Features

  • One method to get all config objects, see get.
  • Automatic derive config object, see FromConfig.
  • Support default value for config object by auto deriving, see derived attr.
  • Config value placeholder parsing, e.g. ${config.key}, see placeholder.
  • Random config value, e.g. configuration.get::<u8>("random.u8") will get random u8 value.
  • Support refreshable value type RefValue, it can be updated when refreshing.
  • Support refresh Configuration.
  • Easy to use, easy to add new config source, easy to organize configuration, see register_source.1
  • Not dependent with serde.

See the examples for general usage information.

Supported File Format

  • Toml: toml, tml
  • Yaml: yaml, yml
  • Json: json
  • Ini: ini

How to Initialize Configuration

  • Use Predefined Source Configuration in One Line
use cfg_rs::*;
let configuration = Configuration::with_predefined().unwrap();
// use configuration.

See init for details.

  • Customize Predefined Source Configuration Builder
use cfg_rs::*;
init_cargo_env!();
let configuration = Configuration::with_predefined_builder()
    .set_cargo_env(init_cargo_env())
    .init()
    .unwrap();
// use configuration.

See init for details.

  • Organize Your Own Sources
use cfg_rs::*;
init_cargo_env!();
let mut configuration = Configuration::new()
    // Layer 0: Register cargo env config source.
    .register_source(init_cargo_env()).unwrap()
    // Layer 1: Register customized config.
    .register_kv("customized_config")
        .set("hello", "world")
        .finish()
        .unwrap();
    // Layer 2: Register random value config.
#[cfg(feature = "rand")]
{
configuration = configuration.register_random().unwrap();
}
    // Layer 3: Register all env variables `CFG_*`.
configuration = configuration.register_prefix_env("CFG").unwrap()
    // Layer 4: Register yaml file(Need feature yaml).
    .register_file("/conf/app.yaml", true).unwrap();

#[cfg(feature = "toml")]
{
    let toml = inline_source!("../app.toml").unwrap();
    configuration = configuration.register_source(toml).unwrap();
}

// use configuration.

See register_kv, register_file, register_random, register_prefix_env for details.

Footnotes

  1. Config order is determined by the order of registering sources, register earlier have higher priority.