16855e09eSopenharmony_ciextern crate nom;
26855e09eSopenharmony_ci
36855e09eSopenharmony_ciuse nom::error::ErrorKind;
46855e09eSopenharmony_ciuse nom::error::ParseError;
56855e09eSopenharmony_ciuse nom::Err::Error;
66855e09eSopenharmony_ciuse nom::IResult;
76855e09eSopenharmony_ci
86855e09eSopenharmony_ci#[derive(Debug, PartialEq)]
96855e09eSopenharmony_cipub enum CustomError<I> {
106855e09eSopenharmony_ci  MyError,
116855e09eSopenharmony_ci  Nom(I, ErrorKind),
126855e09eSopenharmony_ci}
136855e09eSopenharmony_ci
146855e09eSopenharmony_ciimpl<I> ParseError<I> for CustomError<I> {
156855e09eSopenharmony_ci  fn from_error_kind(input: I, kind: ErrorKind) -> Self {
166855e09eSopenharmony_ci    CustomError::Nom(input, kind)
176855e09eSopenharmony_ci  }
186855e09eSopenharmony_ci
196855e09eSopenharmony_ci  fn append(_: I, _: ErrorKind, other: Self) -> Self {
206855e09eSopenharmony_ci    other
216855e09eSopenharmony_ci  }
226855e09eSopenharmony_ci}
236855e09eSopenharmony_ci
246855e09eSopenharmony_cipub fn parse(_input: &str) -> IResult<&str, &str, CustomError<&str>> {
256855e09eSopenharmony_ci  Err(Error(CustomError::MyError))
266855e09eSopenharmony_ci}
276855e09eSopenharmony_ci
286855e09eSopenharmony_cifn main() {}
296855e09eSopenharmony_ci
306855e09eSopenharmony_ci#[cfg(test)]
316855e09eSopenharmony_cimod tests {
326855e09eSopenharmony_ci  use super::parse;
336855e09eSopenharmony_ci  use super::CustomError;
346855e09eSopenharmony_ci  use nom::Err::Error;
356855e09eSopenharmony_ci
366855e09eSopenharmony_ci  #[test]
376855e09eSopenharmony_ci  fn it_works() {
386855e09eSopenharmony_ci    let err = parse("").unwrap_err();
396855e09eSopenharmony_ci    match err {
406855e09eSopenharmony_ci      Error(e) => assert_eq!(e, CustomError::MyError),
416855e09eSopenharmony_ci      _ => panic!("Unexpected error: {:?}", err),
426855e09eSopenharmony_ci    }
436855e09eSopenharmony_ci  }
446855e09eSopenharmony_ci}
45