use std::env;
use std::ffi::OsStr;
pub fn get_env<T: AsRef<OsStr>>(key: T, default: String) -> String {
env::var(key).unwrap_or(default)
}
#[must_use]
pub fn to_lowercase(s: &str) -> String {
s.to_lowercase()
}
pub fn is_numeric(s: &str) -> bool {
s.chars().all(char::is_numeric)
}
#[cfg(test)]
mod tests {
use super::*;
use serial_test::serial;
use temp_env;
#[test]
#[serial]
fn test_get_env_retrieves_value() {
temp_env::with_var("TEST_KEY_EXISTS", Some("my_value"), || {
assert_eq!(
get_env("TEST_KEY_EXISTS", "default".to_string()),
"my_value"
);
});
}
#[test]
#[serial]
fn test_get_env_uses_default() {
temp_env::with_var_unset("TEST_KEY_UNSET", || {
assert_eq!(
get_env("TEST_KEY_UNSET", "default_value".to_string()),
"default_value"
);
});
}
#[test]
fn test_to_lowercase_converts_correctly() {
assert_eq!(to_lowercase("Hello World"), "hello world");
assert_eq!(to_lowercase("ALREADY_LOWER"), "already_lower");
assert_eq!(to_lowercase("123!@#"), "123!@#");
}
#[test]
fn test_is_numeric_validates_correctly() {
assert!(is_numeric("12345"));
assert!(!is_numeric("123a45"));
assert!(!is_numeric("123 45"));
assert!(is_numeric("")); }
}