radiate-core 1.3.1

Core traits and interfaces for the Radiate genetic algorithm library.
Documentation
use std::sync::LazyLock;

pub const COMPACT_LOGGING: &str = "compact";
pub const JSON_LOGGING: &str = "json";
pub const DEFAULT_LOG_LEVEL: &str = "info";

static ENV_CONFIG: LazyLock<EnvConfig> = LazyLock::new(EnvConfig::from_env);

#[derive(Debug, Clone)]
pub struct EnvConfig {
    log_format: Option<String>,
    seed: Option<u64>,
}

impl EnvConfig {
    fn from_env() -> Self {
        dotenvy::dotenv().ok();
        Self {
            log_format: std::env::var("RADIATE_LOG_FORMAT").ok(),
            seed: std::env::var("RADIATE_SEED").ok().and_then(|s| {
                let parsed = s.parse().ok();
                if parsed.is_none() {
                    eprintln!("RADIATE_SEED={s:?} is not a valid u64, ignoring");
                }
                parsed
            }),
        }
    }
}

pub fn config() -> &'static EnvConfig {
    &ENV_CONFIG
}

pub fn log_format() -> Option<String> {
    ENV_CONFIG.log_format.clone()
}

pub fn seed() -> Option<u64> {
    ENV_CONFIG.seed
}