Skip to main content

EventError

Enum EventError 

Source
pub enum EventError {
    Timeout(RequestId),
    InvalidSignal(String),
    InvalidRequest(String),
    PermissionDenied(String),
}
Expand description

Event layer error.

All variants implement ErrorCode for standardized error handling across the ORCS system.

§Variants

VariantWhenRecovery
TimeoutRequest exceeded timeoutRetry may help
InvalidSignalMalformed signalFix the caller
InvalidRequestMalformed requestFix the caller
PermissionDeniedInsufficient privilegeElevate session

§Example

use orcs_event::EventError;
use orcs_types::{ErrorCode, RequestId};

let err = EventError::Timeout(RequestId::new());
assert_eq!(err.code(), "EVENT_TIMEOUT");
assert!(err.is_recoverable());

Variants§

§

Timeout(RequestId)

Request timed out waiting for response.

This is recoverable - retry may succeed if the target component becomes available or finishes current work.

§Common Causes

  • Target component is busy processing other requests
  • Network latency (in distributed scenarios)
  • Target component has crashed (requires restart)

§Recovery

  • Retry with exponential backoff
  • Increase timeout for slow operations
  • Check target component health

§Example

use orcs_event::EventError;
use orcs_types::{ErrorCode, RequestId};

let req_id = RequestId::new();
let err = EventError::Timeout(req_id);

assert!(err.is_recoverable());
assert!(err.to_string().contains("timed out"));
§

InvalidSignal(String)

Invalid signal was received.

This is not recoverable - the signal format or content is invalid and won’t change on retry.

§Common Causes

  • Malformed signal payload
  • Invalid scope specification
  • Deserialization failure

§Recovery

  • Fix the signal construction in the caller
  • Validate signal before sending

§Example

use orcs_event::EventError;
use orcs_types::ErrorCode;

let err = EventError::InvalidSignal("missing scope".into());

assert!(!err.is_recoverable());
assert!(err.to_string().contains("invalid signal"));
§

InvalidRequest(String)

Invalid request was constructed.

This is not recoverable - the request format or content is invalid and won’t change on retry.

§Common Causes

  • Empty operation string
  • Invalid payload format

§Recovery

  • Fix the request construction in the caller
  • Validate parameters before constructing

§Example

use orcs_event::EventError;
use orcs_types::ErrorCode;

let err = EventError::InvalidRequest("operation cannot be empty".into());

assert!(!err.is_recoverable());
assert!(err.to_string().contains("invalid request"));
§

PermissionDenied(String)

Permission denied for the requested operation.

This is not recoverable by retry - requires privilege elevation or different credentials.

§Common Causes

  • Attempting Global signal without elevated privilege
  • Component trying to signal outside its scope
  • Session has expired elevation

§Recovery

  • Elevate the session: session.elevate(duration)
  • Use a more limited scope
  • Request elevation from Human

§Permission Model

| Scope           | Standard | Elevated |
|-----------------|----------|----------|
| Global          | Denied   | Allowed  |
| Channel (own)   | Allowed  | Allowed  |
| Channel (other) | Denied   | Allowed  |

§Example

use orcs_event::EventError;
use orcs_types::ErrorCode;

let err = EventError::PermissionDenied(
    "Global scope requires elevated privilege".into()
);

assert!(!err.is_recoverable());
assert_eq!(err.code(), "EVENT_PERMISSION_DENIED");

Trait Implementations§

Source§

impl Clone for EventError

Source§

fn clone(&self) -> EventError

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EventError

Source§

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

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

impl<'de> Deserialize<'de> for EventError

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<EventError, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for EventError

Source§

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

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

impl Error for EventError

1.30.0 · 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 ErrorCode for EventError

Source§

fn code(&self) -> &'static str

Returns a machine-readable error code.

All event errors use the EVENT_ prefix.

§Codes
  • EVENT_TIMEOUT - Request timed out
  • EVENT_INVALID_SIGNAL - Malformed signal
  • EVENT_INVALID_REQUEST - Malformed request
  • EVENT_PERMISSION_DENIED - Insufficient privilege
Source§

fn is_recoverable(&self) -> bool

Returns whether the error is recoverable.

§Returns
  • true: Retry may succeed (Timeout)
  • false: Retry will not help, requires different action
Source§

impl Serialize for EventError

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<E> ExternalError for E
where E: Into<Box<dyn Error + Sync + Send>>,

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> MaybeSend for T
where T: Send,

Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Serialize for T
where T: Serialize + ?Sized,

Source§

fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>

Source§

fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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> ToStringFallible for T
where T: Display,

Source§

fn try_to_string(&self) -> Result<String, TryReserveError>

ToString::to_string, but without panic on OOM.

Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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