confik 0.15.12

Compose configuration from multiple sources without giving up type safety
Documentation
use confik::{Configuration, TomlSource};
use indoc::indoc;

#[derive(Configuration, Debug, PartialEq, Eq)]
struct Data {
    elements: Vec<usize>,
}

#[derive(Configuration, Debug, PartialEq, Eq)]
struct Config {
    field1: usize,
    field2: String,
    data: Data,
}

fn main() {
    let toml = indoc! {r#"
        field1 = 5
        field2 = "Hello World"

        [data]
        elements = [1, 2, 3, 4]
    "#};

    let config = Config::builder()
        .override_with(TomlSource::new(toml))
        .try_build()
        .expect("Failed to parse config");

    assert_eq!(
        config,
        Config {
            field1: 5,
            field2: String::from("Hello World"),
            data: Data {
                elements: vec![1, 2, 3, 4],
            },
        }
    );
}