use std::env::VarError;
#[derive(Debug, thiserror::Error)]
pub enum EnvError {
#[error("environment variable `{name}` is not set or is invalid")]
Variable {
name: &'static str,
#[source]
source: VarError,
},
#[error("environment variable `{name}` is invalid: {detail}")]
Invalid {
name: &'static str,
detail: String,
},
}
pub fn required(name: &'static str) -> Result<String, EnvError> {
std::env::var(name).map_err(|source| EnvError::Variable { name, source })
}
pub fn optional(name: &'static str) -> Result<Option<String>, EnvError> {
match std::env::var(name) {
Ok(value) => Ok(Some(value)),
Err(VarError::NotPresent) => Ok(None),
Err(source) => Err(EnvError::Variable { name, source }),
}
}