• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 extern crate nom;
2 
3 use nom::error::ErrorKind;
4 use nom::error::ParseError;
5 use nom::Err::Error;
6 use nom::IResult;
7 
8 #[derive(Debug, PartialEq)]
9 pub enum CustomError<I> {
10   MyError,
11   Nom(I, ErrorKind),
12 }
13 
14 impl<I> ParseError<I> for CustomError<I> {
from_error_kind(input: I, kind: ErrorKind) -> Self15   fn from_error_kind(input: I, kind: ErrorKind) -> Self {
16     CustomError::Nom(input, kind)
17   }
18 
append(_: I, _: ErrorKind, other: Self) -> Self19   fn append(_: I, _: ErrorKind, other: Self) -> Self {
20     other
21   }
22 }
23 
parse(_input: &str) -> IResult<&str, &str, CustomError<&str>>24 pub fn parse(_input: &str) -> IResult<&str, &str, CustomError<&str>> {
25   Err(Error(CustomError::MyError))
26 }
27 
main()28 fn main() {}
29 
30 #[cfg(test)]
31 mod tests {
32   use super::parse;
33   use super::CustomError;
34   use nom::Err::Error;
35 
36   #[test]
it_works()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