Skip to main content

PluginError

Enum PluginError 

Source
pub enum PluginError {
    Execution {
        plugin_name: String,
        message: String,
        source: Option<Box<dyn Error + Send + Sync>>,
        code: Option<String>,
        details: HashMap<String, Value>,
        proto_error_code: Option<i64>,
    },
    Timeout {
        plugin_name: String,
        timeout_ms: u64,
        proto_error_code: Option<i64>,
    },
    Violation {
        plugin_name: String,
        violation: PluginViolation,
    },
    Config {
        message: String,
    },
    UnknownHook {
        hook_type: String,
    },
}
Expand description

Top-level error type for the CPEX framework.

Covers plugin execution failures, policy violations, timeouts, and configuration issues. Each variant carries enough context for the caller to log, report, or recover.

Mirrors the Python framework’s PluginErrorModel with:

  • code — business-logic error code (e.g., "rate_limit_exceeded")
  • details — structured diagnostic data for logging
  • proto_error_code — protocol-level error code for the host to map back to the wire format (MCP JSON-RPC, HTTP status, etc.)

Variants§

§

Execution

A plugin raised an execution error.

Fields

§plugin_name: String
§message: String
§source: Option<Box<dyn Error + Send + Sync>>

Business-logic error code (e.g., "invalid_token").

§code: Option<String>

Business-logic error code set by the plugin.

§details: HashMap<String, Value>

Structured diagnostic data for logging or debugging.

§proto_error_code: Option<i64>

Protocol-level error code for the host to map to the wire format. MCP: JSON-RPC codes (e.g., -32603). HTTP: status codes. The host interprets this; CPEX just carries it.

§

Timeout

A plugin exceeded its execution timeout.

Fields

§plugin_name: String
§timeout_ms: u64
§proto_error_code: Option<i64>

Protocol-level error code for the host.

§

Violation

A plugin returned a policy violation (deny).

Fields

§plugin_name: String
§

Config

Configuration parsing or validation failed.

Fields

§message: String
§

UnknownHook

A hook type was not found in the registry.

Fields

§hook_type: String

Implementations§

Source§

impl PluginError

Source

pub fn boxed(self) -> Box<Self>

Box this error for use in Result<T, Box<PluginError>>.

Public APIs return Result<T, Box<PluginError>> rather than Result<T, Box<PluginError>> because the enum is large (~184 bytes — details: HashMap and the source: Box<dyn Error> push it well past clippy’s result_large_err threshold). Boxing keeps Result<T, _> pointer-sized on the success path; the allocation only happens on the error path.

.boxed() is sugar for Box::new(...) that reads better at construction sites: PluginError::Config { ... }.boxed(). ? already calls From::from, and From<T> for Box<T> is built into std, so existing ? chains keep working.

Trait Implementations§

Source§

impl Debug for PluginError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for PluginError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for PluginError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<&Box<PluginError>> for PluginErrorRecord

Forward &Box<PluginError> to the &PluginError impl.

Public APIs return Result<T, Box<PluginError>> (see PluginError::boxed), which means error-handling code in the pipeline (e.g., Ok(Err(e)) inside executor::run_*_phase) holds e: Box<PluginError>. This blanket forward keeps existing (&e).into() call sites working without forcing every caller to write (&*e).into() after the boxing migration.

Source§

fn from(e: &Box<PluginError>) -> Self

Converts to this type from the input type.
Source§

impl From<&PluginError> for PluginErrorRecord

Source§

fn from(e: &PluginError) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more