dipper 0.5.3

An out-of-the-box modular dependency injection web application framework.
Documentation
use std::{env, fmt::Display, sync::LazyLock};

pub const ENV_DIPPER_MODE: &str = "DIPPER_MODE";

#[derive(Debug, Clone, Copy)]
pub enum Mode {
    Dev,
    Test,
    Prod,
}

static MODE: LazyLock<Mode> = LazyLock::new(|| {
    match env::var(ENV_DIPPER_MODE)
        .map(|v| v.to_lowercase())
        .unwrap_or_default()
        .as_str()
    {
        "dev" => Mode::Dev,
        "test" => Mode::Test,
        "prod" => Mode::Prod,
        _ => Mode::Prod,
    }
});

pub fn current_mode() -> Mode {
    *MODE
}

impl Display for Mode {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{}", match self {
            Mode::Dev => "dev",
            Mode::Test => "test",
            Mode::Prod => "prod",
        })
    }
}