use std::fmt;
pub type PluginResult<T> = Result<T, PluginError>;
#[derive(Debug, Clone, Eq, PartialEq, Hash, PartialOrd, Ord)]
pub enum PluginError {
InitializationFailed { name: String, reason: String },
InvalidResult { plugin: String, operation: String, reason: String },
Configuration { plugin: String, reason: String },
Internal { reason: String },
}
impl fmt::Display for PluginError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
PluginError::InitializationFailed { name, reason } => {
write!(f, "Plugin '{name}' failed to initialize: {reason}")
}
PluginError::InvalidResult { plugin, operation, reason } => {
write!(f, "Plugin '{plugin}' returned invalid result for '{operation}': {reason}")
}
PluginError::Configuration { plugin, reason } => {
write!(f, "Plugin '{plugin}' configuration error: {reason}")
}
PluginError::Internal { reason } => {
write!(f, "Internal plugin error: {reason}")
}
}
}
}
impl std::error::Error for PluginError {}