7 releases

0.4.1 Oct 2, 2024
0.4.0 Feb 22, 2024
0.3.0 May 4, 2023
0.2.8 Jul 1, 2022
0.1.0 Aug 21, 2021

#93 in Configuration

Download history 57/week @ 2024-07-28 2/week @ 2024-08-04 23/week @ 2024-08-11 5/week @ 2024-08-25 93/week @ 2024-09-01 29/week @ 2024-09-08 7/week @ 2024-09-15 23/week @ 2024-09-22 133/week @ 2024-09-29 31/week @ 2024-10-06 31/week @ 2024-10-13 10/week @ 2024-10-20 16/week @ 2024-10-27

96 downloads per month

MIT license

120KB
3K SLoC

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.[^priority]
  • Not dependent with serde.

See the examples for general usage information.

[^priority]: Config order is determined by the order of registering sources, register earlier have higher priority.

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.

Dependencies

~0.2–1.3MB
~28K SLoC