1use std::{convert::From, io};
2
3use pcap_parser::{
4 nom::{error::ErrorKind, Err},
5 PcapError,
6};
7use thiserror::Error;
8
9#[derive(Debug, Error)]
10pub enum Error {
11 #[error("Internal parser error {0:?}")]
12 Nom(ErrorKind),
13 #[error("I/O error: {0}")]
14 IoError(#[from] io::Error),
15 #[error("Pcap parser error {0:?}")]
16 Pcap(#[from] PcapError<&'static [u8]>),
17 #[error("Generic error {0}")]
18 Generic(&'static str),
19}
20
21impl From<&'static str> for Error {
22 fn from(s: &'static str) -> Self {
23 Error::Generic(s)
24 }
25}
26
27impl From<ErrorKind> for Error {
28 fn from(e: ErrorKind) -> Self {
29 Error::Nom(e)
30 }
31}
32
33impl<'a> From<Err<PcapError<&'a [u8]>>> for Error {
34 fn from(err: Err<PcapError<&'a [u8]>>) -> Self {
35 match err {
36 Err::Incomplete(_) => Error::Pcap(PcapError::Incomplete),
37 Err::Error(e) | Err::Failure(e) => Error::Pcap(e.to_owned_vec()),
38 }
39 }
40}