use nom::error::{ErrorKind, FromExternalError, ParseError};
use std::fmt::Debug;
pub type IResult<I, O, E = nom::error::Error<I>> = nom::IResult<I, O, Error<I, E>>;
#[derive(Debug, PartialEq)]
pub enum Error<I, E> {
NonAscii,
ChecksumMismatch {
expected: u8,
found: u8,
},
ParsingError(E),
UnrecognizedMessage(I),
InvalidField(I),
Unknown,
}
impl<I, E> ParseError<I> for Error<I, E>
where
E: ParseError<I>,
{
fn from_error_kind(input: I, kind: ErrorKind) -> Self {
Error::ParsingError(E::from_error_kind(input, kind))
}
fn append(_: I, _: ErrorKind, other: Self) -> Self {
other
}
}
impl<I, E, EX> FromExternalError<I, EX> for Error<I, E>
where
E: FromExternalError<I, EX>,
{
fn from_external_error(input: I, kind: ErrorKind, e: EX) -> Self {
Error::ParsingError(E::from_external_error(input, kind, e))
}
}