16855e09eSopenharmony_ci#![allow(dead_code)] 26855e09eSopenharmony_ci 36855e09eSopenharmony_ciuse nom::bytes::streaming::tag; 46855e09eSopenharmony_ciuse nom::character::streaming::digit1 as digit; 56855e09eSopenharmony_ciuse nom::combinator::verify; 66855e09eSopenharmony_ciuse nom::error::{ErrorKind, ParseError}; 76855e09eSopenharmony_ci#[cfg(feature = "alloc")] 86855e09eSopenharmony_ciuse nom::multi::count; 96855e09eSopenharmony_ciuse nom::sequence::terminated; 106855e09eSopenharmony_ciuse nom::IResult; 116855e09eSopenharmony_ci 126855e09eSopenharmony_ci#[derive(Debug)] 136855e09eSopenharmony_cipub struct CustomError(String); 146855e09eSopenharmony_ci 156855e09eSopenharmony_ciimpl<'a> From<(&'a str, ErrorKind)> for CustomError { 166855e09eSopenharmony_ci fn from(error: (&'a str, ErrorKind)) -> Self { 176855e09eSopenharmony_ci CustomError(format!("error code was: {:?}", error)) 186855e09eSopenharmony_ci } 196855e09eSopenharmony_ci} 206855e09eSopenharmony_ci 216855e09eSopenharmony_ciimpl<'a> ParseError<&'a str> for CustomError { 226855e09eSopenharmony_ci fn from_error_kind(_: &'a str, kind: ErrorKind) -> Self { 236855e09eSopenharmony_ci CustomError(format!("error code was: {:?}", kind)) 246855e09eSopenharmony_ci } 256855e09eSopenharmony_ci 266855e09eSopenharmony_ci fn append(_: &'a str, kind: ErrorKind, other: CustomError) -> Self { 276855e09eSopenharmony_ci CustomError(format!("{:?}\nerror code was: {:?}", other, kind)) 286855e09eSopenharmony_ci } 296855e09eSopenharmony_ci} 306855e09eSopenharmony_ci 316855e09eSopenharmony_cifn test1(input: &str) -> IResult<&str, &str, CustomError> { 326855e09eSopenharmony_ci //fix_error!(input, CustomError, tag!("abcd")) 336855e09eSopenharmony_ci tag("abcd")(input) 346855e09eSopenharmony_ci} 356855e09eSopenharmony_ci 366855e09eSopenharmony_cifn test2(input: &str) -> IResult<&str, &str, CustomError> { 376855e09eSopenharmony_ci //terminated!(input, test1, fix_error!(CustomError, digit)) 386855e09eSopenharmony_ci terminated(test1, digit)(input) 396855e09eSopenharmony_ci} 406855e09eSopenharmony_ci 416855e09eSopenharmony_cifn test3(input: &str) -> IResult<&str, &str, CustomError> { 426855e09eSopenharmony_ci verify(test1, |s: &str| s.starts_with("abcd"))(input) 436855e09eSopenharmony_ci} 446855e09eSopenharmony_ci 456855e09eSopenharmony_ci#[cfg(feature = "alloc")] 466855e09eSopenharmony_cifn test4(input: &str) -> IResult<&str, Vec<&str>, CustomError> { 476855e09eSopenharmony_ci count(test1, 4)(input) 486855e09eSopenharmony_ci} 49