pub trait SplitPrefix {
type Item;
fn split_prefix(&self, pred: impl FnMut(Self::Item) -> bool) -> Option<(&Self, &Self)>;
}
impl SplitPrefix for str {
type Item = char;
fn split_prefix(&self, mut pred: impl FnMut(char) -> bool) -> Option<(&Self, &Self)> {
match self.find(|c| !pred(c)) {
Some(0) => None, Some(ix) => Some(self.split_at(ix)), None => Some((self, "")), }
}
}