Figment is a semi-hierarchical configuration library for Rust so con-free, it's
unreal.
use serde::Deserialize;use figment::{Figment, providers::{Format,Toml,Json,Env}};#[derive(Deserialize)]structPackage{name:String,authors:Vec<String>,publish:Option<bool>,// ... and so on ...}#[derive(Deserialize)]structConfig{package:Package,rustc:Option<String>,// ... and so on ...}let config:Config = Figment::new().merge(Toml::file("Cargo.toml")).merge(Env::prefixed("CARGO_")).merge(Env::raw().only(&["RUSTC","RUSTDOC"])).join(Json::file("Cargo.json")).extract()?;
See the documentation for a detailed usage guide and
information.
Usage
Add the following to your Cargo.toml, enabling the desired built-in providers:
[dependencies]
figment = { version = "0.10", features = ["toml", "env"] }
Third-Party Providers
The following external libraries implement Figment providers:
Wraps existing providers. For any key ending in _FILE (configurable), emits
a key without the _FILE suffix with a value corresponding to the contents
of the file whose path is the original key's value.
Please submit a pull request to add your library to this list.
License
Figment is licensed under either of the following, at your option:
SergioBenitez/Figment
Figment

Figment is a semi-hierarchical configuration library for Rust so con-free, it's unreal.
See the documentation for a detailed usage guide and information.
Usage
Add the following to your
Cargo.toml
, enabling the desired built-in providers:Third-Party Providers
The following external libraries implement Figment providers:
figment_file_provider_adapter
Wraps existing providers. For any key ending in
_FILE
(configurable), emits a key without the_FILE
suffix with a value corresponding to the contents of the file whose path is the original key's value.Please submit a pull request to add your library to this list.
License
Figment is licensed under either of the following, at your option: