more parser annotation
This commit is contained in:
parent
b042e06084
commit
4e813a7efd
@ -28,6 +28,12 @@ pub trait ParserExtension<I, O, E>: Parser<I, O, E> {
|
||||
fn then_ignore<O2, P: Parser<I, O2, E>>(self, next: P) -> impl Parser<I, O, E>;
|
||||
fn ignore_then<O2, P: Parser<I, O2, E>>(self, next: P) -> impl Parser<I, O2, E>;
|
||||
fn surrounded_by<O2>(self, surrounding: impl Parser<I, O2, E>) -> impl Parser<I, O, E>;
|
||||
fn to_anno(self) -> AnnotatedParser<Self, I, O, E>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
AnnotatedParser::new(self)
|
||||
}
|
||||
fn to_named(self, name: &str) -> AnnotatedParser<Self, I, O, E>
|
||||
where
|
||||
Self: Sized,
|
||||
|
@ -1,10 +1,11 @@
|
||||
use crate::{ParseResult, Parser};
|
||||
use crate::{representation::Representation, ParseResult, Parser, ParserExtension};
|
||||
|
||||
pub fn literal(expected: &'static str) -> impl Fn(&str) -> ParseResult<&str, &str, ()> {
|
||||
move |input| match input.get(0..expected.len()) {
|
||||
pub fn literal<'a>(expected: &'static str) -> impl Parser<&'a str, &'a str, ()> {
|
||||
let p = move |input: &'a str| match input.get(0..expected.len()) {
|
||||
Some(next) if next == expected => Ok((next, &input[expected.len()..])),
|
||||
_ => Err(((), input)),
|
||||
}
|
||||
};
|
||||
p.to_anno().with_repr(Representation::new())
|
||||
}
|
||||
|
||||
pub fn literal_char<'a>(expected: char) -> impl Parser<&'a str, char, ()> {
|
||||
|
@ -1,2 +1,12 @@
|
||||
#[derive(Debug)]
|
||||
pub struct Representation {}
|
||||
|
||||
impl Representation {
|
||||
pub fn show(&self) {
|
||||
println!("Not done");
|
||||
}
|
||||
|
||||
pub fn new() -> Self {
|
||||
Self {}
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ use super::*;
|
||||
|
||||
#[test]
|
||||
fn parsing() {
|
||||
let (parsed, rest) = literal("a")("a yolo").unwrap();
|
||||
let (parsed, rest) = literal("a").parse("a yolo").unwrap();
|
||||
assert_eq!(parsed, "a");
|
||||
assert_eq!(rest, " yolo");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user