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",
})
}
}