envstruct 1.1.0

Convert the environment variables into a structured configuration
Documentation
#![allow(dead_code)]
use envstruct::prelude::*;
use serial_test::*;
use std::env;

#[derive(EnvStruct, Debug, PartialEq)]
pub struct Config {
    pub value1: String,

    #[env(skip)]
    pub value2: String,

    #[env(skip)]
    pub value3: Option<String>,

    pub value4: i32,

    #[env(skip)]
    pub value5: std::marker::PhantomData<Foo>,
}

pub struct Foo {}

fn clean_env() {
    std::env::vars().for_each(|(name, _)| {
        std::env::remove_var(name);
    });
}

#[test]
#[serial]
fn test_env_skip() {
    clean_env();
    env::set_var("TEST_VALUE1", "value1");
    env::set_var("TEST_VALUE2", "value2");
    env::set_var("TEST_VALUE4", "42");

    let config = Config::with_prefix("TEST").unwrap();
    assert_eq!(config.value1, "value1");
    assert_eq!(config.value2, "");
    assert_eq!(config.value3, None);
    assert_eq!(config.value4, 42);

    let usage = Config::usage_with_prefix("TEST").unwrap();
    println!("usage: \n{usage}");
    assert_eq!(
        usage,
        " NAME        | TYPE   | DEFAULT \n-------------+--------+---------\n TEST_VALUE1 | String |  \n TEST_VALUE4 | i32    |  \n"
    );
}