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