tryphon 0.2.0

Type-safe configuration loading from environment variables using derive macros
Documentation
mod common;

use common::TEST_MUTEX;
use std::env;
use std::net::Ipv4Addr;
use tryphon::Config;

#[derive(Debug, PartialEq, Config)]
enum MessagingConfig {
    Kafka {
        #[env("KAFKA_BROKER")]
        broker: Ipv4Addr,
    },
    Pulsar {
        #[env("PULSAR_BROKER")]
        broker: Ipv4Addr,
    },
    Mock {
        #[env("MOCK_BROKER")]
        #[default(Ipv4Addr::new(1, 1, 1, 1))]
        broker: Ipv4Addr,
    },
}

fn clear_test_env_vars() {
    unsafe {
        clear_test_env_vars!("KAFKA_BROKER", "PULSAR_BROKER");
    }
}

#[test]
fn test_enum() {
    let _unused = TEST_MUTEX.lock().unwrap();

    clear_test_env_vars();

    unsafe {
        env::set_var("KAFKA_BROKER", "127.0.0.1");
    }

    matches!(MessagingConfig::load(), Ok(MessagingConfig::Kafka { broker }) if broker == Ipv4Addr::new(127, 0, 0, 1));

    clear_test_env_vars();

    unsafe {
        env::set_var("PULSAR_BROKER", "192.168.1.1");
    }

    matches!(MessagingConfig::load(), Ok(MessagingConfig::Pulsar { broker }) if broker == Ipv4Addr::new(192, 168, 1, 1));

    clear_test_env_vars();

    assert_eq!(
        MessagingConfig::load().unwrap(),
        MessagingConfig::Mock {
            broker: Ipv4Addr::new(1, 1, 1, 1)
        }
    );
}