blob: 8ca0d7b2d84f33eff525dab11f2273bcffb58282 [file] [log] [blame]
#![allow(dead_code)]
use nom8::bytes::tag;
use nom8::character::digit1 as digit;
use nom8::error::{ErrorKind, ParseError};
use nom8::input::Streaming;
#[cfg(feature = "alloc")]
use nom8::multi::count;
use nom8::prelude::*;
use nom8::sequence::terminated;
use nom8::IResult;
#[derive(Debug)]
pub struct CustomError(String);
impl<'a> From<(&'a str, ErrorKind)> for CustomError {
fn from(error: (&'a str, ErrorKind)) -> Self {
CustomError(format!("error code was: {:?}", error))
}
}
impl<'a> ParseError<Streaming<&'a str>> for CustomError {
fn from_error_kind(_: Streaming<&'a str>, kind: ErrorKind) -> Self {
CustomError(format!("error code was: {:?}", kind))
}
fn append(_: Streaming<&'a str>, kind: ErrorKind, other: CustomError) -> Self {
CustomError(format!("{:?}\nerror code was: {:?}", other, kind))
}
}
fn test1(input: Streaming<&str>) -> IResult<Streaming<&str>, &str, CustomError> {
//fix_error!(input, CustomError, tag!("abcd"))
tag("abcd")(input)
}
fn test2(input: Streaming<&str>) -> IResult<Streaming<&str>, &str, CustomError> {
//terminated!(input, test1, fix_error!(CustomError, digit))
terminated(test1, digit)(input)
}
fn test3(input: Streaming<&str>) -> IResult<Streaming<&str>, &str, CustomError> {
test1.verify(|s: &str| s.starts_with("abcd")).parse(input)
}
#[cfg(feature = "alloc")]
fn test4(input: Streaming<&str>) -> IResult<Streaming<&str>, Vec<&str>, CustomError> {
count(test1, 4)(input)
}