markab_parser/string_parser/
parser.rs1use crate::{
2 string_parser::StringParserError,
3 Parser,
4};
5
6#[derive(Debug)]
7pub struct StringParser<'a>
8{
9 requirement: &'a str,
10}
11
12impl<'a> StringParser<'a>
13{
14 pub fn new(requirement: &'a str) -> Self
15 {
16 Self { requirement }
17 }
18}
19
20impl<'a> Parser<'a> for StringParser<'a>
21{
22 type Error = StringParserError<'a>;
23 type Output = &'a str;
24 type Requirement = &'a str;
25 type RequirementContext = ();
26
27 fn parse(&self, src: &'a str, pos: &mut usize) -> Result<Self::Output, Self::Error>
28 {
29 let from = *pos;
30 let len = self.requirement.len();
31 if src[from..].starts_with(self.requirement)
32 {
33 *pos += len;
34 Ok(&src[from..*pos])
35 }
36 else
37 {
38 Err(StringParserError::new(from, self.requirement(None), src))
39 }
40 }
41
42 fn requirement(&self, _: Option<&Self::RequirementContext>) -> Self::Requirement
43 {
44 self.requirement
45 }
46}