From 8cdfa445d6629ffef4cb84967ff7017654045bc2 Mon Sep 17 00:00:00 2001 From: mo khan Date: Wed, 2 Jul 2025 18:36:06 -0600 Subject: chore: add vendor directory --- vendor/time/src/error/format.rs | 113 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 vendor/time/src/error/format.rs (limited to 'vendor/time/src/error/format.rs') diff --git a/vendor/time/src/error/format.rs b/vendor/time/src/error/format.rs new file mode 100644 index 00000000..906a58c0 --- /dev/null +++ b/vendor/time/src/error/format.rs @@ -0,0 +1,113 @@ +//! Error formatting a struct + +use alloc::boxed::Box; +use core::fmt; +use std::io; + +use crate::error; + +/// An error occurred when formatting. +#[non_exhaustive] +#[derive(Debug)] +pub enum Format { + /// The type being formatted does not contain sufficient information to format a component. + #[non_exhaustive] + InsufficientTypeInformation, + /// The component named has a value that cannot be formatted into the requested format. + /// + /// This variant is only returned when using well-known formats. + InvalidComponent(&'static str), + /// A component provided was out of range. + ComponentRange(Box), + /// A value of `std::io::Error` was returned internally. + StdIo(io::Error), +} + +impl fmt::Display for Format { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::InsufficientTypeInformation => f.write_str( + "The type being formatted does not contain sufficient information to format a \ + component.", + ), + Self::InvalidComponent(component) => write!( + f, + "The {component} component cannot be formatted into the requested format." + ), + Self::ComponentRange(err) => err.fmt(f), + Self::StdIo(err) => err.fmt(f), + } + } +} + +impl From for Format { + fn from(err: error::ComponentRange) -> Self { + Self::ComponentRange(Box::new(err)) + } +} + +impl From for Format { + fn from(err: io::Error) -> Self { + Self::StdIo(err) + } +} + +impl TryFrom for error::ComponentRange { + type Error = error::DifferentVariant; + + fn try_from(err: Format) -> Result { + match err { + Format::ComponentRange(err) => Ok(*err), + _ => Err(error::DifferentVariant), + } + } +} + +impl TryFrom for io::Error { + type Error = error::DifferentVariant; + + fn try_from(err: Format) -> Result { + match err { + Format::StdIo(err) => Ok(err), + _ => Err(error::DifferentVariant), + } + } +} + +#[cfg(feature = "std")] +impl std::error::Error for Format { + fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { + match self { + Self::InsufficientTypeInformation | Self::InvalidComponent(_) => None, + Self::ComponentRange(err) => Some(&**err), + Self::StdIo(err) => Some(err), + } + } +} + +impl From for crate::Error { + fn from(original: Format) -> Self { + Self::Format(original) + } +} + +impl TryFrom for Format { + type Error = error::DifferentVariant; + + fn try_from(err: crate::Error) -> Result { + match err { + crate::Error::Format(err) => Ok(err), + _ => Err(error::DifferentVariant), + } + } +} + +#[cfg(feature = "serde")] +impl Format { + /// Obtain an error type for the serializer. + #[doc(hidden)] // Exposed only for the `declare_format_string` macro + pub fn into_invalid_serde_value(self) -> S::Error { + use serde::ser::Error; + S::Error::custom(self) + } +} -- cgit v1.2.3