1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use crate::parser::*;
use bogobble::*;

impl<CF: BackTo> SSParser<CF> for &'static str {
    fn ss_parse<'a>(&self, it: &PIter<'a>, res: &mut String, _: &CF) -> SSRes<'a> {
        let mut i2 = it.clone();
        for x in self.chars() {
            if i2.next() != Some(x) {
                return i2.err_rs(self);
            }
        }
        res.push_str(self);
        Ok((i2, None))
    }
}

impl<CF: BackTo> SSParser<CF> for char {
    fn ss_parse<'a>(&self, it: &PIter<'a>, res: &mut String, _: &CF) -> SSRes<'a> {
        let mut i2 = it.clone();
        match i2.next().map(|c| *self == c) {
            Some(true) => {
                res.push(*self);
                Ok((i2, None))
            }
            _ => Err(it.err(Expected::Char(*self))),
        }
    }
}