blob: 89366dc9e19e31314ed8c26490ea6f95f6b87ab6 [file] [log] [blame]
#![allow(dead_code)]
#![cfg_attr(feature = "cargo-clippy", allow(block_in_if_condition_stmt))]
#[macro_use]
extern crate nom;
use nom::IResult;
use nom::error::{ErrorKind,ParseError};
use nom::character::streaming::digit1 as digit;
use std::convert::From;
#[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<&'a str> for CustomError {
fn from_error_kind(_: &'a str, kind: ErrorKind) -> Self {
CustomError(format!("error code was: {:?}", kind))
}
fn append(_: &'a str, kind: ErrorKind, other: CustomError) -> Self {
CustomError(format!("{:?}\nerror code was: {:?}", other, kind))
}
}
fn test1(input: &str) -> IResult<&str, &str, CustomError> {
//fix_error!(input, CustomError, tag!("abcd"))
tag!(input, "abcd")
}
fn test2(input: &str) -> IResult<&str, &str, CustomError> {
//terminated!(input, test1, fix_error!(CustomError, digit))
terminated!(input, test1, digit)
}
fn test3(input: &str) -> IResult<&str, &str, CustomError> {
verify!(input, test1, |s: &str| {
s.starts_with("abcd")
})
}
#[cfg(feature = "alloc")]
fn test4(input: &str) -> IResult<&str, Vec<&str>, CustomError> {
count!(input, test1, 4)
}