curlz/
utils.rs

1/// parses pairs like `"key=value"` strings into tuples of `Option<(key, value)>`
2/// spaces around the `separator` are being removed
3#[inline]
4pub fn parse_pairs(pairs: &str, separator: char) -> Option<(&str, &str)> {
5    pairs
6        .split_once(separator)
7        .map(|(key, value)| (key.trim(), value.trim()))
8}
9
10#[cfg(test)]
11mod tests {
12    use super::*;
13
14    #[test]
15    fn should_split_defines_by_equal_happy_path() {
16        assert_eq!(parse_pairs("foo=bar", '='), Some(("foo", "bar")));
17        assert_eq!(parse_pairs("foo =bar", '='), Some(("foo", "bar")));
18        assert_eq!(parse_pairs("foo = bar", '='), Some(("foo", "bar")));
19        assert_eq!(parse_pairs("foo= bar", '='), Some(("foo", "bar")));
20        assert_eq!(parse_pairs("foo: bar", ':'), Some(("foo", "bar")));
21    }
22
23    #[test]
24    fn should_split_defines_by_equal_unhappy_path() {
25        assert_eq!(
26            parse_pairs("baz=123324+adf+=vasdf", '='),
27            Some(("baz", "123324+adf+=vasdf"))
28        );
29    }
30
31    #[test]
32    fn should_not_split_defines_if_no_equal_is_contained() {
33        assert_eq!(parse_pairs("foo", '='), None);
34        assert_eq!(parse_pairs("baz=", '='), Some(("baz", "")));
35    }
36}