net_parser_rs/
errors.rs

1use thiserror::{Error as ThisError};
2
3#[derive(Clone, Debug, ThisError)]
4pub enum Error {
5    #[error("Incomplete: {0:?}", size)]
6    Incomplete { size: Option<usize> },
7    #[error("{0}", msg)]
8    Failure { msg: String },
9    #[error("{0}", msg)]
10    Custom { msg: String },
11}
12
13unsafe impl Sync for Error {}
14unsafe impl Send for Error {}
15
16impl<I, E> From<nom::Err<I, E>> for Error
17    where
18        I: std::fmt::Debug,
19        E: std::fmt::Debug,
20{
21    fn from(err: nom::Err<I, E>) -> Self {
22        Error::from(&err)
23    }
24}
25
26impl<I, E> From<&nom::Err<I, E>> for Error
27    where
28        I: std::fmt::Debug,
29        E: std::fmt::Debug,
30{
31    fn from(err: &nom::Err<I, E>) -> Self {
32        match err {
33            nom::Err::Incomplete(nom::Needed::Unknown) => {
34                Error::Incomplete {
35                    size: None
36                }
37            }
38            nom::Err::Incomplete(nom::Needed::Size(sz)) => {
39                Error::Incomplete {
40                    size: Some(*sz)
41                }
42            }
43            nom::Err::Error(c) => {
44                Error::Failure {
45                    msg: format!("Error: {:?}", c)
46                }
47            }
48            nom::Err::Failure(c) => {
49                Error::Failure {
50                    msg: format!("Failure: {:?}", c)
51                }
52            }
53        }
54    }
55}