pub fn is_install_telemetry_enabled<F>(settings_getter: F) -> bool
where
F: FnOnce() -> bool,
{
match std::env::var("OXI_TELEMETRY") {
Ok(val) => is_truthy_env_flag(&val),
Err(_) => settings_getter(),
}
}
pub fn is_truthy_env_flag(value: &str) -> bool {
let lower = value.to_ascii_lowercase();
matches!(lower.as_str(), "1" | "true" | "yes")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn truthy_values() {
assert!(is_truthy_env_flag("1"));
assert!(is_truthy_env_flag("true"));
assert!(is_truthy_env_flag("True"));
assert!(is_truthy_env_flag("TRUE"));
assert!(is_truthy_env_flag("yes"));
assert!(is_truthy_env_flag("Yes"));
assert!(is_truthy_env_flag("YES"));
}
#[test]
fn falsy_values() {
assert!(!is_truthy_env_flag(""));
assert!(!is_truthy_env_flag("0"));
assert!(!is_truthy_env_flag("false"));
assert!(!is_truthy_env_flag("no"));
}
#[test]
fn env_var_takes_precedence() {
std::env::set_var("OXI_TELEMETRY", "1");
assert!(is_install_telemetry_enabled(|| false));
std::env::remove_var("OXI_TELEMETRY");
assert!(is_install_telemetry_enabled(|| true));
assert!(!is_install_telemetry_enabled(|| false));
}
}