+ })
+ }
+}
+
+/// Get an environment variable or return an error.
+fn get_env_var(name: &str, default: Option<String>) -> Result<String, ConfigurationError> {
+ match env::var(name) {
+ Ok(value) => Ok(value),
+ Err(_) => match default {
+ Some(default_value) => Ok(default_value),
+ None => Err(ConfigurationError::MissingEnvVar(name.to_string())),
+ },
+ }
+}
+
+/// Get an environment variable and parse it as a number. Return a default
+/// if not set.
+fn get_env_number(name: &str, default: u16) -> Result<u16, ConfigurationError> {
+ match env::var(name) {
+ Ok(value) => value
+ .parse()
+ .map_err(|_| ConfigurationError::ParseError(name.to_string())),
+ Err(_) => Ok(default),