configure_me_codegen 0.4.4

A library for easy processing of application configuration from files, environment variables and command line arguments.
Documentation
use std::path::{Path, PathBuf};

fn process_template(test_name: &str, out_dir: &Path) {
    use std::io::{self, Write, BufRead, BufReader, BufWriter};

    let file = std::fs::File::open("tests/expected_outputs/config-template.rs").unwrap();
    let file = BufReader::new(file);
    let out_file_name = out_dir.join(format!("{}-config.rs", test_name));
    let output = std::fs::File::create(&out_file_name).expect("Failed to open test output file");
    let mut output = BufWriter::new(output);
    for line in file.lines() {
        let line = line.unwrap();

        if line.starts_with("<<\"") && line.ends_with("\">>") {
            let file_name = format!("tests/expected_outputs/{}/{}", test_name, &line[3..(line.len() - 3)]);
            eprintln!("Reading: {}", file_name);
            let mut src = std::fs::File::open(&file_name).unwrap();
            io::copy(&mut src, &mut output).unwrap();
        } else {
            writeln!(output, "{}", line).unwrap();
        }
    }
}

fn main() {
    let out_dir = PathBuf::from(std::env::var_os("OUT_DIR").expect("Missing OUT_DIR"));
    let out_dir_expected_outputs = out_dir.join("expected_outputs");
    std::fs::create_dir_all(&out_dir_expected_outputs).unwrap();

    let tests = ["empty", "single_optional_param", "single_mandatory_param", "single_default_param", "single_switch", "multiple_params", "no_arg", "short_switches", "conf_files", "with_custom_merge"];

    for test in &tests {
        process_template(test, &out_dir_expected_outputs);
    }
}