thisconfig 0.2.2

Config Loader for Rust Applications
Documentation

ThisConfig - Config Loader

Configuration management for Rust applications. Load configuration from TOML files with support for environment variable interpolation and multi-file merging.

Features

  • Load configuration from TOML files
  • Multi file support with merging and overriding
  • Environment variable interpolation (${VAR} and ${VAR:default})
  • File loading directly on config files (key = "file:path")

Installation

cargo add thisconfig

Usage

1. Define configuration structure

use serde::Deserialize;
use thisconfig::config;

#[config(key = "database")]
#[derive(Debug, Clone, Deserialize)]
pub struct DatabaseConfig {
    pub host: String,
    pub port: u16,
    pub user: String,
}

2. Create configuration file

config/config.toml:

[database]
host = "${DB_HOST:localhost}"
port = 5432
user = "${DB_USER:admin}"

3. Use in your application

use thisconfig::Config;

#[tokio::main]
async fn main() {
    let config = Config::builder()
        .add_file("config/config.toml")
        .build()
        .expect("Failed to load config");

    let db_config = config.expect::<DatabaseConfig>();

    println!("DB: {}:{}", db_config.host, db_config.port);
}
```

## Configuration Loading

Use `Config::builder()` to specify configuration files. Files can be optional (loaded if present) or required (must exist). You can also add TOML strings directly.

```rust
let config = Config::builder()
    .add_file("config/config.toml")  // optional
    .add_required_file("secrets.toml")  // required
    .add_toml_str("[extra]\nkey = 'value'")  // in-memory TOML
    .build()?;

Files are merged in order, with later files overriding earlier ones.

Environment variables

Supports interpolation in TOML with default values:

[server]
host = "${HOST:0.0.0.0}"      # Uses HOST or defaults to "0.0.0.0"
port = "${PORT}"              # Requires PORT to be defined
database_url = "${DATABASE_URL}/my_database"  # Requires DATABASE_URL and appends "/my_database"

Config Methods

Method Description
get<T>() Returns the configuration section as Option<T>
get_or_default<T>() Returns the config section or default if missing
expect<T>() Returns the config section or panics if missing
get_validated<T>() Returns the config section or validation errors if invalid

Note: Enable the validation feature in your Cargo.toml for get_validated<T>() support. This requires your config structs to implement Validate from the validator crate.

Examples

See the examples directory for complete working examples of using thisconfig.