confgr 0.2.1

A simple rust application configuration derive macro.
Documentation
use confgr::prelude::*;

use std::fs::File;
use std::io::Write;

#[derive(Config, Default, Debug)]
#[config(path = "tests/simple_settings.toml")]
struct AppConfig {
    url: String,
    port: u32,
    enabled: bool,
    #[config(nest, name = "db")]
    database: DatabaseConfig,
}

#[derive(Config, Default, Debug)]
struct DatabaseConfig {
    #[config(skip)]
    host: String,
    #[config(skip)]
    username: String,
    #[config(skip, name = "secret")]
    password: String,
}

fn setup_simple_config_file() {
    let settings = r#"
        url = "https://example.com"
        port = 8080
        enabled = true

        [db]
        host = "localhost"
        username = "admin"
        secret = "securepass"
        "#;

    let mut settings_file = File::create("tests/simple_settings.toml").unwrap();
    writeln!(settings_file, "{}", settings).unwrap();
}

fn cleanup_simple_config_files() {
    std::fs::remove_file("tests/simple_settings.toml").unwrap();
}

#[test]
fn test_simple_config() {
    setup_simple_config_file();

    let config = AppConfig::load_config();
    println!("{:?}", config);

    assert_eq!(config.url, "https://example.com");
    assert_eq!(config.port, 8080);
    assert!(config.enabled);

    assert_eq!(config.database.password, "securepass");

    cleanup_simple_config_files();
}