use crate::errors::{CruxmontError, CurxmontErrorStatus};
use std::env;
pub trait GetConfigVariable {
fn get_config_variable(variable: String) -> Result<String, CruxmontError>;
}
pub struct EnvConfig;
impl GetConfigVariable for EnvConfig {
fn get_config_variable(variable: String) -> Result<String, CruxmontError> {
match env::var(&variable) {
Ok(val) => Ok(val),
Err(_) => Err(CruxmontError::new(
format!("{} not found in environment", variable),
CurxmontErrorStatus::Unknown,
)),
}
}
}
#[macro_export]
macro_rules! define_static_config {
($handle:ident, $( $key:expr => $value:expr ),*) => {
#[derive(Clone)]
pub struct $handle;
impl kernel::config::GetConfigVariable for $handle {
fn get_config_variable(variable: String) -> Result<String, kernel::errors::CruxmontError> {
match variable.as_str() {
$(
$key => Ok($value.to_string()),
)*
_ => Err(kernel::errors::CruxmontError::new(
format!("key: {} was not found", variable),
cruxmont::errors::CurxmontErrorStatus::Unknown
))
}
}
}
};
}