use serde::Deserialize;
use std::borrow::Cow;
use std::sync::Arc;
use validator::ValidationError;
#[derive(Debug, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum EnvMode {
Dev,
Prd,
Stg,
}
impl From<&Arc<str>> for EnvMode {
fn from(value: &Arc<str>) -> Self {
match value.as_ref() {
"dev" => EnvMode::Dev,
"prd" => EnvMode::Prd,
"stg" => EnvMode::Stg,
_ => unreachable!("invalid environment mode"),
}
}
}
impl EnvMode {
pub fn is_dev(mode: &str) -> bool {
mode == "dev"
}
pub fn is_prd(mode: &str) -> bool {
mode == "prd"
}
pub fn is_stg(mode: &str) -> bool {
mode == "stg"
}
pub fn is_valid(mode: &str) -> bool {
Self::is_dev(mode) || Self::is_prd(mode) || Self::is_stg(mode)
}
}
pub fn verify(mode: &str) -> Result<(), ValidationError> {
if !EnvMode::is_valid(mode) {
return Err(
ValidationError::new("env_mode").with_message(Cow::Owned(String::from(
"Please provide a valid environment mode",
))),
);
}
Ok(())
}