mirror of
https://github.com/OMGeeky/confique.git
synced 2025-12-28 15:28:04 +01:00
69142ceaebdafbd5fce3d7cdc49ea0165ec7f827
Confique: type-safe, layered configuration library
Confique is a rather light-weight library that helps with configuration management in a type-safe and DRY (don't repeat yourself) fashion.
Features:
- Type safe: the code using the config values does not need to parse strings or
unwrapanyOptions. All values already have the correct type. - Layered configuration: you can load from and then merge multiple sources of configuration.
- Load config values from:
- Environment variables
- Files: TOML & YAML
- Anything with a
serdeDeserializer (built-in support for more formats coming soon)
- Based on
serde: less code inconfique(more light-weight) and access to a huge ecosystem of high quality parsers. - Easily generate configuration "templates" to describe all available config values to your users.
Simple example
use std::path::PathBuf;
use confique::Config;
#[derive(Config)]
struct Conf {
#[config(env = "EXAMPLE_APP_USERNAME")]
username: String,
#[config(env = "EXAMPLE_APP_BUFFER_SIZE", default = 4096)]
buffer_size: u32,
#[config(nested)]
log: LogConf,
}
#[derive(Config)]
struct LogConf {
#[config(default = true)]
stdout: bool,
file: Option<PathBuf>,
}
let config = Conf::builder()
.env()
.file("example-app.toml")
.file("/etc/example-app/config.toml")
.load()?;
See the documentation for more information.
Status of this project
Confique is still a very young project. There are lots of features and improvements already planned. I'm developing this library alongside a web project that uses it.
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Description
Languages
Rust
100%