use std::time::Duration;
pub type GrammarResult<T> = Result<T, GrammarError>;
#[derive(Debug, Clone, PartialEq)]
pub enum GrammarError {
MissingWorkload,
InvalidDimensions(String),
InvalidScaleDomain { min: f64, max: f64 },
DeviceNotFound(u32),
Timeout(Duration),
UnsupportedStrategy(String),
ValidationError(String),
ExecutionError(String),
}
impl std::fmt::Display for GrammarError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
GrammarError::MissingWorkload => write!(f, "Missing required workload specification"),
GrammarError::InvalidDimensions(msg) => write!(f, "Invalid dimensions: {}", msg),
GrammarError::InvalidScaleDomain { min, max } => {
write!(f, "Invalid scale domain: min {} >= max {}", min, max)
}
GrammarError::DeviceNotFound(id) => write!(f, "Device {} not found", id),
GrammarError::Timeout(d) => write!(f, "Execution timeout after {:?}", d),
GrammarError::UnsupportedStrategy(s) => write!(f, "Unsupported strategy: {}", s),
GrammarError::ValidationError(s) => write!(f, "Validation error: {}", s),
GrammarError::ExecutionError(s) => write!(f, "Execution error: {}", s),
}
}
}
impl std::error::Error for GrammarError {}