| 1 | macro_rules! err { |
| 2 | ($($tt:tt)*) => {{ |
| 3 | crate::shared::util::error::Error::from_args(format_args!($($tt)*)) |
| 4 | }} |
| 5 | } |
| 6 | |
| 7 | pub(crate) use err; |
| 8 | |
| 9 | /// An error that can be returned when parsing. |
| 10 | #[derive (Clone, Debug)] |
| 11 | pub struct Error { |
| 12 | #[cfg (feature = "alloc" )] |
| 13 | message: alloc::boxed::Box<str>, |
| 14 | // only-jiff-start |
| 15 | #[cfg (not(feature = "alloc" ))] |
| 16 | message: &'static str, |
| 17 | // only-jiff-end |
| 18 | } |
| 19 | |
| 20 | impl Error { |
| 21 | pub(crate) fn from_args<'a>(message: core::fmt::Arguments<'a>) -> Error { |
| 22 | #[cfg (feature = "alloc" )] |
| 23 | { |
| 24 | use alloc::string::ToString; |
| 25 | |
| 26 | let message: Box = message.to_string().into_boxed_str(); |
| 27 | Error { message } |
| 28 | } |
| 29 | // only-jiff-start |
| 30 | #[cfg (not(feature = "alloc" ))] |
| 31 | { |
| 32 | let message = message.as_str().unwrap_or( |
| 33 | "unknown Jiff error (better error messages require \ |
| 34 | enabling the `alloc` feature for the `jiff` crate)" , |
| 35 | ); |
| 36 | Error { message } |
| 37 | } |
| 38 | // only-jiff-end |
| 39 | } |
| 40 | } |
| 41 | |
| 42 | impl core::fmt::Display for Error { |
| 43 | fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { |
| 44 | core::fmt::Display::fmt(&self.message, f) |
| 45 | } |
| 46 | } |
| 47 | |