use std::collections::HashMap;
pub fn parse_map(map: &str) -> HashMap<String, String> {
map.split(';')
.filter_map(|pair| {
let mut parts = pair.splitn(2, ':');
match (parts.next(), parts.next()) {
(Some(k), Some(v)) => Some((k.to_string(), v.to_string())),
_ => None,
}
})
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_parse_map() {
let input = "key1:value1;key2:value2;key3:value3";
let expected: HashMap<String, String> = [
("key1".to_string(), "value1".to_string()),
("key2".to_string(), "value2".to_string()),
("key3".to_string(), "value3".to_string()),
]
.iter()
.cloned()
.collect();
let result = parse_map(input);
assert_eq!(result, expected);
}
#[test]
fn test_parse_empty_map() {
let input = "";
let expected: HashMap<String, String> = HashMap::new();
let result = parse_map(input);
assert_eq!(result, expected);
}
}