Skip to main content

shardline_protocol/
text.rs

1/// Parses a boolean value from common operator-friendly strings.
2#[must_use]
3pub fn parse_bool(value: &str) -> Option<bool> {
4    match value {
5        "true" | "1" | "yes" | "on" => Some(true),
6        "false" | "0" | "no" | "off" => Some(false),
7        _other => None,
8    }
9}
10
11#[cfg(test)]
12mod tests {
13    #[test]
14    fn parse_true_strings() {
15        assert_eq!(super::parse_bool("true"), Some(true));
16        assert_eq!(super::parse_bool("1"), Some(true));
17        assert_eq!(super::parse_bool("yes"), Some(true));
18        assert_eq!(super::parse_bool("on"), Some(true));
19    }
20
21    #[test]
22    fn parse_false_strings() {
23        assert_eq!(super::parse_bool("false"), Some(false));
24        assert_eq!(super::parse_bool("0"), Some(false));
25        assert_eq!(super::parse_bool("no"), Some(false));
26        assert_eq!(super::parse_bool("off"), Some(false));
27    }
28
29    #[test]
30    fn case_sensitive_true() {
31        assert_eq!(super::parse_bool("True"), None);
32    }
33
34    #[test]
35    fn parse_empty() {
36        assert_eq!(super::parse_bool(""), None);
37    }
38
39    #[test]
40    fn parse_invalid() {
41        assert_eq!(super::parse_bool("invalid"), None);
42    }
43
44    #[test]
45    fn parse_trailing_whitespace() {
46        assert_eq!(super::parse_bool("yes "), None);
47    }
48}