Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/leptonyu/cfg-rs
A Configuration Library for Rust Applications
https://github.com/leptonyu/cfg-rs
config configuration environment json rust settings toml yaml
Last synced: about 22 hours ago
JSON representation
A Configuration Library for Rust Applications
- Host: GitHub
- URL: https://github.com/leptonyu/cfg-rs
- Owner: leptonyu
- License: mit
- Created: 2021-08-14T13:19:01.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-10-02T15:30:09.000Z (3 months ago)
- Last Synced: 2024-12-15T09:06:47.191Z (8 days ago)
- Topics: config, configuration, environment, json, rust, settings, toml, yaml
- Language: Rust
- Homepage: https://crates.io/crates/cfg-rs
- Size: 257 KB
- Stars: 39
- Watchers: 3
- Forks: 5
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# cfg-rs: A Configuration Library for Rust Applications
[![Crates.io](https://img.shields.io/crates/v/cfg-rs?style=flat-square)](https://crates.io/crates/cfg-rs)
[![Crates.io](https://img.shields.io/crates/d/cfg-rs?style=flat-square)](https://crates.io/crates/cfg-rs)
[![Documentation](https://docs.rs/cfg-rs/badge.svg)](https://docs.rs/cfg-rs)
[![dependency status](https://deps.rs/repo/github/leptonyu/cfg-rs/status.svg)](https://deps.rs/crate/cfg-rs)
[![License](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](https://github.com/leptonyu/cfg-rs/blob/master/LICENSE-MIT)
[![Actions Status](https://github.com/leptonyu/cfg-rs/workflows/Rust/badge.svg)](https://github.com/leptonyu/cfg-rs/actions)
[![Minimum supported Rust version](https://img.shields.io/badge/rustc-1.74+-green.svg)](#minimum-supported-rust-version)## Major Features
* One method to get all config objects, see [get](struct.Configuration.html#method.get).
* Automatic derive config object, see [FromConfig](derive.FromConfig.html).
* Support default value for config object by auto deriving, see [derived attr](derive.FromConfig.html#field-annotation-attribute).
* Config value placeholder parsing, e.g. `${config.key}`, see [placeholder](enum.ConfigValue.html#placeholder-expression).
* Random config value, e.g. `configuration.get::("random.u8")` will get random `u8` value.
* Support refreshable value type [RefValue](struct.RefValue.html), it can be updated when refreshing.
* Support refresh [Configuration](struct.Configuration.html).
* Easy to use, easy to add new config source, easy to organize configuration, see [register_source](struct.Configuration.html#method.register_source).[^priority]
* Not dependent with serde.See the [examples](https://github.com/leptonyu/cfg-rs/tree/main/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
```rust,no_run
use cfg_rs::*;
let configuration = Configuration::with_predefined().unwrap();
// use configuration.
```
See [init](struct.PredefinedConfigurationBuilder.html#method.init) for details.* Customize Predefined Source Configuration Builder
```rust,no_run
use cfg_rs::*;
init_cargo_env!();
let configuration = Configuration::with_predefined_builder()
.set_cargo_env(init_cargo_env())
.init()
.unwrap();
// use configuration.
```
See [init](struct.PredefinedConfigurationBuilder.html#method.init) for details.* Organize Your Own Sources
```rust,no_run
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](struct.Configuration.html#method.register_kv), [register_file](struct.Configuration.html#method.register_file), [register_random](struct.Configuration.html#method.register_random), [register_prefix_env](struct.Configuration.html#method.register_prefix_env) for details.