I don't know what you mean by standard solution, but you can implement this yourself using str::split with a variable keeping track whether we are in a quoted section of the string or not:
fn split(s: &str) -> Vec<String> {
let mut wrapped = false;
s.split(|c| {
if c == '"' {
wrapped = !wrapped;
}
c == ' ' && !wrapped
})
.map(|s| s.replace("\"", "")) // remove the quotation marks from the sub-strings
.collect()
}
fn main() {
let s = "foo bar \"bar foo\" \"easy task\"";
let v = split(s);
let expect: Vec<String> = ["foo", "bar", "bar foo", "easy task"]
.into_iter()
.map(ToOwned::to_owned)
.collect();
assert_eq!(v, expect);
}