pub fn split_at_first<'a>(s: &'a str, delimiter: &str) -> Option<(&'a str, &'a str)> {
s.find(delimiter).map(|pos| {
let (left, right) = s.split_at(pos);
(left, &right[delimiter.len()..])
})
}
pub fn join_with_delimiter(left: &str, right: &str, delimiter: &str) -> String {
format!("{}{}{}", left, delimiter, right)
}
pub fn latin1_to_string(s: &[u8]) -> String {
let mut result = String::with_capacity(s.len() * 2);
for &c in s {
result.push(c as char);
}
result
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_split_at_first() {
assert_eq!(split_at_first("key=value", "="), Some(("key", "value")));
assert_eq!(split_at_first("key:value", ":"), Some(("key", "value")));
assert_eq!(split_at_first("key", "="), None);
assert_eq!(split_at_first("", "="), None);
}
#[test]
fn test_join_with_delimiter() {
assert_eq!(join_with_delimiter("key", "value", "="), "key=value");
assert_eq!(join_with_delimiter("hello", "world", ", "), "hello, world");
assert_eq!(join_with_delimiter("", "value", "="), "=value");
}
#[test]
fn test_latin1_to_string() {
assert_eq!(latin1_to_string(b"Hello World"), "Hello World");
assert_eq!(latin1_to_string(b""), "");
assert_eq!(latin1_to_string(&[65, 66, 67]), "ABC");
}
}