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