1extern crate nom; 2 3use nom::error::ErrorKind; 4use nom::error::ParseError; 5use nom::Err::Error; 6use nom::IResult; 7 8#[derive(Debug, PartialEq)] 9pub enum CustomError<I> { 10 MyError, 11 Nom(I, ErrorKind), 12} 13 14impl<I> ParseError<I> for CustomError<I> { 15 fn from_error_kind(input: I, kind: ErrorKind) -> Self { 16 CustomError::Nom(input, kind) 17 } 18 19 fn append(_: I, _: ErrorKind, other: Self) -> Self { 20 other 21 } 22} 23 24pub fn parse(_input: &str) -> IResult<&str, &str, CustomError<&str>> { 25 Err(Error(CustomError::MyError)) 26} 27 28fn main() {} 29 30#[cfg(test)] 31mod tests { 32 use super::parse; 33 use super::CustomError; 34 use nom::Err::Error; 35 36 #[test] 37 fn it_works() { 38 let err = parse("").unwrap_err(); 39 match err { 40 Error(e) => assert_eq!(e, CustomError::MyError), 41 _ => panic!("Unexpected error: {:?}", err), 42 } 43 } 44} 45