use std::ffi::OsString;
#[doc(hidden)]
pub fn non_empty_os_var(name: &str) -> Option<OsString> {
non_empty_os_var_with(name, |key| std::env::var_os(key))
}
#[doc(hidden)]
pub fn non_empty_os_var_with(
name: &str,
lookup: impl FnOnce(&str) -> Option<OsString>,
) -> Option<OsString> {
lookup(name).filter(|value| !value.is_empty())
}
#[doc(hidden)]
pub fn non_empty_var(name: &str) -> Option<String> {
non_empty_var_with(name, |key| std::env::var(key).ok())
}
#[doc(hidden)]
pub fn non_empty_var_with(
name: &str,
lookup: impl FnOnce(&str) -> Option<String>,
) -> Option<String> {
lookup(name).filter(|value| !value.is_empty())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn injected_lookup_treats_empty_environment_values_as_unset() {
assert_eq!(
non_empty_os_var_with("PATH_RUNG", |key| {
assert_eq!(key, "PATH_RUNG");
Some(OsString::new())
}),
None
);
assert_eq!(
non_empty_os_var_with("PATH_RUNG", |_| Some(OsString::from("relative/path"))),
Some(OsString::from("relative/path"))
);
assert_eq!(
non_empty_var_with("NAME_RUNG", |_| Some(String::new())),
None
);
assert_eq!(
non_empty_var_with("NAME_RUNG", |_| Some("host-name".to_string())),
Some("host-name".to_string())
);
}
}