Crate config

Source
Expand description

§More Configuration   CI Crates.io MIT licensed

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,async for 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§

ext
Contains configuration extension methods.
util
Contains configuration utility functions.

Structs§

ChainedConfigurationProviderchained
Represents a chained ConfigurationProvider.
ChainedConfigurationSourcechained
Represents a chained ConfigurationSource.
CommandLineConfigurationProvidercmd
Represents a ConfigurationProvider that provides command line configuration values.
CommandLineConfigurationSourcecmd
Represents a ConfigurationSource for command line data.
ConfigurationIterator
Represents an iterator of key/value pairs for a Configuration.
DefaultConfigurationBuilderstd
Represents a configuration builder.
DefaultConfigurationRootstd
Represents the root of a configuration.
DefaultConfigurationSectionstd
Represent a configuration section.
EnvironmentVariablesConfigurationProviderenv
Represents a ConfigurationProvider for environment variables.
EnvironmentVariablesConfigurationSourceenv
Represents a ConfigurationSource for environment variables.
FileSource
Represents a file configuration source.
FileSourceBuilder
Represents a builder for a file source.
IniConfigurationProviderini
Represents a ConfigurationProvider for *.ini files.
IniConfigurationSourceini
Represents a ConfigurationSource for *.ini files.
JsonConfigurationProviderjson
Represents a ConfigurationProvider for *.json files.
JsonConfigurationSourcejson
Represents a ConfigurationSource for *.json files.
MemoryConfigurationProvidermem
Represents a ConfigurationProvider that provides in-memory configuration values.
MemoryConfigurationSourcemem
Represents a ConfigurationSource for in-memory data.
XmlConfigurationProviderxml
Represents a ConfigurationProvider for *.xml files.
XmlConfigurationSourcexml
Represents a ConfigurationSource for *.xml files.

Enums§

ConfigurationPath
Represents a configuration path.
LoadError
Defines the possible load errors.
ReloadError
Defines the possible reload errors.

Traits§

Configuration
Defines the behavior of a configuration.
ConfigurationBuilder
Defines the behavior used to build an application Configuration.
ConfigurationProvider
Defines the behavior of an object that provides configuration key/values for an application.
ConfigurationProviderIterator
Defines the behavior of an iterator over a ConfigurationProvider set.
ConfigurationRoot
Represents the root of a Configuration hierarchy.
ConfigurationSection
Defines the behavior for a section of application configuration values.
ConfigurationSource
Represents a source of configuration key/value pairs for an application.

Type Aliases§

LoadResult
Represents a configuration load result.
ReloadResult
Represents a configuration reload result.
Value
Represents the type alias for a configuration value.