pub fn split_sentence<T: AsRef<str>>(sentence: T) -> Option<Vec<String>> {
shell_words::split(sentence.as_ref()).ok()
}
pub fn join_sentence<I, S>(words: I) -> String
where
I: IntoIterator<Item = S>,
S: AsRef<str>,
{
shell_words::join(words)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_split() {
assert_eq!(
split_sentence("AbC dEf GHi"),
Some(vec!["AbC".into(), "dEf".into(), "GHi".into()])
);
assert_eq!(
split_sentence("\"AbC dEf\" GHi"),
Some(vec!["AbC dEf".into(), "GHi".into()])
);
assert_eq!(split_sentence("\"AbC dEf GHi"), None);
}
#[test]
fn test_join() {
assert_eq!(join_sentence(vec!["AbC", "dEf", "GHi"]), "AbC dEf GHi",);
assert_eq!(join_sentence(vec!["AbC dEf", "GHi"]), "'AbC dEf' GHi",);
assert_eq!(join_sentence(vec!["\"AbC dEf", "GHi"]), "'\"AbC dEf' GHi",);
}
}