Config parsing cleanup

This commit is contained in:
Nils Andreas Svee committed 2022-09-28 01:42:06 +02:00
1 parent cf14fcd5f8
commit 6e8b50bc7f
1 file changed
+22 -37
+22 -37
View File
@@ -179,8 +179,8 @@ impl Config {
uci_key: &str, uci_key: &str,
default: Option<T>, default: Option<T>,
) -> Result<T, Box<dyn Error>> { ) -> Result<T, Box<dyn Error>> {
return match Self::get_value(env_key, uci_key, None) { return match Self::get_value(env_key, uci_key) {
Ok(val) => match val.parse::<T>() { Some(val) => match val.parse::<T>() {
Ok(parsed_val) => Ok(parsed_val), Ok(parsed_val) => Ok(parsed_val),
// Ran into an compilation error while trying to return the // Ran into an compilation error while trying to return the
// error as-is, so using my own error type to indicate something went wrong while parsing // error as-is, so using my own error type to indicate something went wrong while parsing
@@ -188,60 +188,45 @@ impl Config {
config_key: env_key.to_string(), config_key: env_key.to_string(),
})), })),
}, },
Err(e) => { None => {
return match default { return match default {
Some(val) => Ok(val), Some(val) => Ok(val),
None => Err(e), None => Err(Box::new(MissingConfigError {
config_key: env_key.to_string(),
})),
} }
} }
}; };
} }
fn get_value( fn get_value(env_key: &str, uci_key: &str) -> Option<String> {
env_key: &str, if let Ok(val) = env::var(env_key) {
uci_key: &str, return Some(val);
default: Option<String>,
) -> Result<String, Box<dyn Error>> {
let mut err: Option<Box<dyn Error>>;
match env::var(env_key) {
Ok(val) => return Ok(val),
Err(e) => err = Some(Box::new(e)),
};
match Self::get_from_uci(uci_key) {
Ok(opt) => match opt {
Some(val) => return Ok(val),
None => {}
},
Err(e) => err = Some(e),
};
match default {
Some(val) => return Ok(val),
None => {
err = Some(Box::new(MissingConfigError {
config_key: env_key.to_string(),
}))
}
} }
Err(err.unwrap()) if let Some(val) = Self::get_from_uci(uci_key) {
return Some(val);
}
None
} }
#[cfg(feature = "uci")] #[cfg(feature = "uci")]
fn get_from_uci(key: &str) -> Result<Option<String>, Box<dyn Error>> { fn get_from_uci(key: &str) -> Option<String> {
let mut uci: Uci = Uci::new()?; let mut uci: Uci = Uci::new()?;
return match uci.get(key) { return match uci.get(key) {
Ok(val) => Ok(Some(val)), Ok(val) => Some(val),
Err(e) => Err(Box::new(e)), Err(e) => {
warn!("Problem getting config from UCI: {}", e);
None
}
}; };
} }
#[cfg(not(feature = "uci"))] #[cfg(not(feature = "uci"))]
fn get_from_uci(_: &str) -> Result<Option<String>, Box<dyn Error>> { fn get_from_uci(_: &str) -> Option<String> {
Ok(None) None
} }
pub fn load_reflectors(&self) -> Result<Vec<IpAddr>, Box<dyn Error>> { pub fn load_reflectors(&self) -> Result<Vec<IpAddr>, Box<dyn Error>> {