use {
crate::domain::numbers::CssNumberConversionError,
std::{
error::Error,
fmt::{self, Display, Formatter},
num::ParseFloatError,
},
};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum UnitFromStrError {
Float(ParseFloatError),
Conversion(CssNumberConversionError),
InvalidDimension,
}
impl Display for UnitFromStrError {
#[inline(always)]
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
use self::UnitFromStrError::*;
match *self
{
Float(ref error) => write!(f, "Could not parse string to CssFloat because parsing it as a float caused '{}'", error),
Conversion(ref error) => write!(f, "Could not parse string to CssFloat because converting it from a parsed float caused '{}'", error),
InvalidDimension => write!(f, "Could not parse string to CssFloat because it had an invalid dimension"),
}
}
}
impl Error for UnitFromStrError {
#[inline(always)]
fn description(&self) -> &str {
use self::UnitFromStrError::*;
match *self {
Float(_) => "float error",
Conversion(_) => "conversion error",
InvalidDimension => "invalid dimension",
}
}
#[inline(always)]
fn cause(&self) -> Option<&dyn Error> {
use self::UnitFromStrError::*;
match *self {
Float(ref error) => Some(error),
Conversion(ref error) => Some(error),
InvalidDimension => None,
}
}
}
impl From<ParseFloatError> for UnitFromStrError {
#[inline(always)]
fn from(error: ParseFloatError) -> Self {
UnitFromStrError::Float(error)
}
}
impl From<CssNumberConversionError> for UnitFromStrError {
#[inline(always)]
fn from(error: CssNumberConversionError) -> Self {
UnitFromStrError::Conversion(error)
}
}