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
| Variant | When | Recovery |
|---|---|---|
Timeout | Request exceeded timeout | Retry may help |
InvalidSignal | Malformed signal | Fix the caller |
InvalidRequest | Malformed request | Fix the caller |
PermissionDenied | Insufficient privilege | Elevate 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
impl Clone for EventError
Source§fn clone(&self) -> EventError
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)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for EventError
impl Debug for EventError
Source§impl<'de> Deserialize<'de> for EventError
impl<'de> Deserialize<'de> for EventError
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<EventError, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
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
impl Display for EventError
Source§impl Error for EventError
impl Error for EventError
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
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
fn description(&self) -> &str
👎Deprecated since 1.42.0:
use the Display impl or to_string()
Source§impl ErrorCode for EventError
impl ErrorCode for EventError
Source§impl Serialize for EventError
impl Serialize for EventError
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
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§
impl Freeze for EventError
impl RefUnwindSafe for EventError
impl Send for EventError
impl Sync for EventError
impl Unpin for EventError
impl UnsafeUnpin for EventError
impl UnwindSafe for EventError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<E> ExternalError for E
impl<E> ExternalError for E
fn into_lua_err(self) -> Error
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreimpl<T> MaybeSend for Twhere
T: Send,
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Serialize for T
impl<T> Serialize for T
fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>
fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.