#[cfg(feature = "alloc")]
use alloc::string::String;
use core::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum MetricError {
SignConventionMismatch(String),
InvalidDimension(String),
ValidationFailed(String),
ConversionError(String),
}
impl MetricError {
pub fn sign_convention_mismatch(msg: impl Into<String>) -> Self {
Self::SignConventionMismatch(msg.into())
}
pub fn invalid_dimension(msg: impl Into<String>) -> Self {
Self::InvalidDimension(msg.into())
}
pub fn validation_failed(msg: impl Into<String>) -> Self {
Self::ValidationFailed(msg.into())
}
pub fn conversion_error(msg: impl Into<String>) -> Self {
Self::ConversionError(msg.into())
}
}
impl fmt::Display for MetricError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
MetricError::SignConventionMismatch(msg) => {
write!(f, "Sign convention mismatch: {}", msg)
}
MetricError::InvalidDimension(msg) => {
write!(f, "Invalid dimension: {}", msg)
}
MetricError::ValidationFailed(msg) => {
write!(f, "Metric validation failed: {}", msg)
}
MetricError::ConversionError(msg) => {
write!(f, "Conversion error: {}", msg)
}
}
}
}
#[cfg(feature = "std")]
impl std::error::Error for MetricError {}