lance_core/utils/
parse.rs1pub fn str_is_truthy(val: &str) -> bool {
6 val.eq_ignore_ascii_case("1")
7 | val.eq_ignore_ascii_case("true")
8 | val.eq_ignore_ascii_case("on")
9 | val.eq_ignore_ascii_case("yes")
10 | val.eq_ignore_ascii_case("y")
11}
12
13pub fn str_to_bool(val: &str) -> Option<bool> {
19 if str_is_truthy(val) {
20 Some(true)
21 } else if val.eq_ignore_ascii_case("0")
22 || val.eq_ignore_ascii_case("false")
23 || val.eq_ignore_ascii_case("off")
24 || val.eq_ignore_ascii_case("no")
25 || val.eq_ignore_ascii_case("n")
26 {
27 Some(false)
28 } else {
29 None
30 }
31}
32
33pub fn parse_env_as_bool(env_var_name: &str, default_value: bool) -> bool {
39 std::env::var(env_var_name)
40 .ok()
41 .map(|value| str_is_truthy(value.trim()))
42 .unwrap_or(default_value)
43}
44
45#[cfg(test)]
46mod tests {
47 use super::*;
48
49 #[test]
50 fn test_str_to_bool_truthy() {
51 for val in [
52 "1", "true", "True", "TRUE", "on", "ON", "yes", "YES", "y", "Y",
53 ] {
54 assert_eq!(
55 str_to_bool(val),
56 Some(true),
57 "expected Some(true) for {:?}",
58 val
59 );
60 }
61 }
62
63 #[test]
64 fn test_str_to_bool_falsy() {
65 for val in [
66 "0", "false", "False", "FALSE", "off", "OFF", "no", "NO", "n", "N",
67 ] {
68 assert_eq!(
69 str_to_bool(val),
70 Some(false),
71 "expected Some(false) for {:?}",
72 val
73 );
74 }
75 }
76
77 #[test]
78 fn test_str_to_bool_unknown() {
79 for val in ["", "2", "maybe", "truthy", "nonsense"] {
80 assert_eq!(str_to_bool(val), None, "expected None for {:?}", val);
81 }
82 }
83}