time/error/
component_range.rsuse core::fmt;
use crate::error;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ComponentRange {
    pub(crate) name: &'static str,
    pub(crate) minimum: i64,
    pub(crate) maximum: i64,
    pub(crate) value: i64,
    pub(crate) conditional_range: bool,
}
impl ComponentRange {
    pub const fn name(self) -> &'static str {
        self.name
    }
    pub const fn is_conditional(self) -> bool {
        self.conditional_range
    }
}
impl fmt::Display for ComponentRange {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(
            f,
            "{} must be in the range {}..={}",
            self.name, self.minimum, self.maximum
        )?;
        if self.conditional_range {
            f.write_str(", given values of other parameters")?;
        }
        Ok(())
    }
}
impl From<ComponentRange> for crate::Error {
    fn from(original: ComponentRange) -> Self {
        Self::ComponentRange(original)
    }
}
impl TryFrom<crate::Error> for ComponentRange {
    type Error = error::DifferentVariant;
    fn try_from(err: crate::Error) -> Result<Self, Self::Error> {
        match err {
            crate::Error::ComponentRange(err) => Ok(err),
            _ => Err(error::DifferentVariant),
        }
    }
}
#[cfg(feature = "serde")]
impl serde::de::Expected for ComponentRange {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(
            f,
            "a value in the range {}..={}",
            self.minimum, self.maximum
        )
    }
}
#[cfg(feature = "serde")]
impl ComponentRange {
    pub(crate) fn into_de_error<E: serde::de::Error>(self) -> E {
        E::invalid_value(serde::de::Unexpected::Signed(self.value), &self)
    }
}
#[cfg(feature = "std")]
#[allow(clippy::std_instead_of_core)]
impl std::error::Error for ComponentRange {}