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 56 57 58 59 60 61 62 63 64 65 66 67 68
use core::fmt::{self, Debug, Display}; use super::TokenMeta; #[derive(Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct TokenError<E> { meta: TokenMeta, error: E, } unsafe impl<E> Send for TokenError<E> where E: Send, {} unsafe impl<E> Sync for TokenError<E> where E: Sync, {} impl<E> TokenError<E> { #[inline(always)] pub fn new(meta: TokenMeta, error: E) -> Self { TokenError { meta: meta, error: error, } } #[inline(always)] pub fn meta(&self) -> &TokenMeta { &self.meta } #[inline(always)] pub fn error(&self) -> &E { &self.error } } impl<E> fmt::Debug for TokenError<E> where E: Debug, { #[inline] fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let meta = self.meta(); f.debug_struct("TokenError") .field("error", &self.error) .field("index", &meta.index_start()) .field("length", &meta.len()) .field("lines", &meta.line_count()) .field("row", &meta.row_start()) .field("col", &meta.col_start()) .finish() } } impl<E> fmt::Display for TokenError<E> where E: Display, { #[inline] fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let meta = self.meta(); f.debug_struct("TokenError") .field("error", &format!("{}", self.error)) .field("index", &meta.index_start()) .field("length", &meta.len()) .field("lines", &meta.line_count()) .field("row", &meta.row_start()) .field("col", &meta.col_start()) .finish() } }