Expand description
§More Configuration

More Configuration is a configuration library for Rust.
You may be looking for:
§Features
This crate provides the following features:
- default - Abstractions for configuration, including the std features
- std - Standard configuration implementation
- all - Includes all features, except async
- async - Use configuration in an asynchronous context
- mem - An in-memory configuration source
- env - An environment variables configuration source
- cmd - A command-line argument configuration source
- json - A *.json file configuration source
- xml - A *.xml file configuration source
- ini - An *.ini file configuration source
- chained - Chain multiple configuration sources
- binder - Bind a configuration to strongly-typed values and structs
Use
--features all,asyncfor all features with asynchronous support
§Configuration in Action
Consider the following demo.json file:
{
"text": "Hello world!",
"demo": true,
"clients": [{
"region": "us-west",
"url": "https://tempuri.org"
}]
}
The configuration can be loaded, merged, and accessed from multiple sources:
use config::{*, ext::*};
fn main() {
let config = DefaultConfigurationBuilder::new()
.add_in_memory(&[("Demo", "false")])
.add_json_file("demo.json".is().optional())
.add_env_vars()
.add_command_line()
.build()
.unwrap();
if let Some(demo) = config.get("demo") {
if demo.as_str() == "true" {
println!("{}", config.get("Text").unwrap().as_str());
println!("{}", config.get("Clients:0:Region").unwrap().as_str());
return;
}
}
println!("Not a demo!");
}Raw configuration values can be used, but they are much more interesting when we data bind them to strongly-typed values:
use serde::Deserialize;
#[derive(Default, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"))]
struct Client {
region: String,
url: String,
}
#[derive(Default, Deserialize)]
#[serde(rename_all(deserialize = "PascalCase"))]
struct AppOptions {
text: String,
demo: bool,
clients: Vec<Client>,
}The first letter of JSON configuration keys are normalized to uppercase.
use config::{*, ext::*};
fn main() {
let file = std::env::current_exe()
.unwrap()
.parent()
.unwrap()
.join("../../demo.json");
let config = DefaultConfigurationBuilder::new()
.add_json_file(file)
.build()
.unwrap();
let app: AppOptions = config.reify();
if app.demo {
println!("{}", &app.text);
println!("{}", &app.clients[0].region);
return;
}
println!("Not a demo!");
}§Minimum Supported Rust Version
When increasing the minimum supported Rust version (MSRV), the new version must have been released at least six months ago. The current MSRV is 1.60.
§License
This project is licensed under the MIT license.
Re-exports§
pub use util::*;util
Modules§
- Contains configuration extension methods.
- Contains configuration utility functions.
Structs§
- ChainedConfigurationProvider
chainedRepresents a chainedConfigurationProvider. - ChainedConfigurationSource
chainedRepresents a chainedConfigurationSource. - Represents a
ConfigurationProviderthat provides command line configuration values. - Represents a
ConfigurationSourcefor command line data. - Represents an iterator of key/value pairs for a
Configuration. - Represents a configuration builder.
- Represents the root of a configuration.
- Represent a configuration section.
- Represents a
ConfigurationProviderfor environment variables. - Represents a
ConfigurationSourcefor environment variables. - Represents a file configuration source.
- Represents a builder for a file source.
- Represents a
ConfigurationProviderfor*.inifiles. - Represents a
ConfigurationSourcefor*.inifiles. - Represents a
ConfigurationProviderfor*.jsonfiles. - Represents a
ConfigurationSourcefor*.jsonfiles. - Represents a
ConfigurationProviderthat provides in-memory configuration values. - Represents a
ConfigurationSourcefor in-memory data. - Represents a
ConfigurationProviderfor*.xmlfiles. - Represents a
ConfigurationSourcefor*.xmlfiles.
Enums§
- Represents a configuration path.
- Defines the possible load errors.
- Defines the possible reload errors.
Traits§
- Defines the behavior of a configuration.
- Defines the behavior used to build an application
Configuration. - Defines the behavior of an object that provides configuration key/values for an application.
- Defines the behavior of an iterator over a
ConfigurationProviderset. - Represents the root of a
Configurationhierarchy. - Defines the behavior for a section of application configuration values.
- Represents a source of configuration key/value pairs for an application.
Type Aliases§
- Represents a configuration load result.
- Represents a configuration reload result.
- Represents the type alias for a configuration value.