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