Skip to main content

mago_analyzer/plugin/
error.rs

1//! Error types for the plugin system.
2
3use std::fmt;
4
5/// Result type for plugin operations.
6pub type PluginResult<T> = Result<T, PluginError>;
7
8/// Errors that can occur during plugin operations.
9#[derive(Debug, Clone, Eq, PartialEq, Hash, PartialOrd, Ord)]
10pub enum PluginError {
11    /// Plugin initialization failed.
12    InitializationFailed { name: String, reason: String },
13
14    /// Plugin returned an invalid result.
15    InvalidResult { plugin: String, operation: String, reason: String },
16
17    /// Plugin configuration error.
18    Configuration { plugin: String, reason: String },
19
20    /// Internal plugin error.
21    Internal { reason: String },
22}
23
24impl fmt::Display for PluginError {
25    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26        match self {
27            PluginError::InitializationFailed { name, reason } => {
28                write!(f, "Plugin '{name}' failed to initialize: {reason}")
29            }
30            PluginError::InvalidResult { plugin, operation, reason } => {
31                write!(f, "Plugin '{plugin}' returned invalid result for '{operation}': {reason}")
32            }
33            PluginError::Configuration { plugin, reason } => {
34                write!(f, "Plugin '{plugin}' configuration error: {reason}")
35            }
36            PluginError::Internal { reason } => {
37                write!(f, "Internal plugin error: {reason}")
38            }
39        }
40    }
41}
42
43impl std::error::Error for PluginError {}