From 69142ceaebdafbd5fce3d7cdc49ea0165ec7f827 Mon Sep 17 00:00:00 2001 From: Lukas Kalbertodt Date: Tue, 27 Jul 2021 17:33:29 +0200 Subject: [PATCH] Add README --- README.md | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..8b78b93 --- /dev/null +++ b/README.md @@ -0,0 +1,76 @@ +# Confique: type-safe, layered configuration library + +[CI status of main](https://github.com/LukasKalbertodt/confique/actions?query=workflow%3ACI+branch%3Amaster) +[Crates.io Version](https://crates.io/crates/confique) +[docs.rs](https://docs.rs/confique) + +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 `unwrap` any `Option`s. + 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 `serde` Deserializer (built-in support for more formats coming soon) +- **Based on `serde`**: less code in `confique` (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 + +```rust +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, +} + + +let config = Conf::builder() + .env() + .file("example-app.toml") + .file("/etc/example-app/config.toml") + .load()?; +``` + +See [**the documentation**](https://docs.rs/confique) 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.