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