kernel/object/capability/
ipc.rs

1//! Event-based IPC capabilities for kernel objects
2
3use crate::ipc::event::{Event, EventFilter};
4use alloc::vec::Vec;
5
6/// Event sending capability
7///
8/// Objects that can send events to other objects or channels.
9pub trait EventSender: Send + Sync {
10    /// Send an event
11    ///
12    /// # Arguments
13    /// * `event` - The event to send
14    ///
15    /// # Returns
16    /// * `Ok(())` on successful send
17    /// * `Err(error_message)` on failure
18    fn send_event(&self, event: Event) -> Result<(), &'static str>;
19}
20
21/// Event receiving capability
22///
23/// Objects that can receive and poll for events.
24pub trait EventReceiver: Send + Sync {
25    /// Check if events are pending
26    ///
27    /// # Returns
28    /// * `true` if events are available, `false` otherwise
29    fn has_pending_events(&self) -> bool;
30}
31
32/// Event subscription management capability
33///
34/// Objects that can manage event filters and subscriptions.
35pub trait EventSubscriber: Send + Sync {
36    /// Register an event filter with a handler ID
37    ///
38    /// # Arguments
39    /// * `filter` - Event filter to register
40    /// * `handler_id` - Unique identifier for this handler
41    ///
42    /// # Returns
43    /// * `Ok(())` on successful registration
44    /// * `Err(error_message)` on failure
45    fn register_filter(&self, filter: EventFilter, handler_id: usize) -> Result<(), &'static str>;
46
47    /// Unregister an event filter by handler ID
48    ///
49    /// # Arguments
50    /// * `handler_id` - Handler ID to unregister
51    ///
52    /// # Returns
53    /// * `Ok(())` on successful unregistration
54    /// * `Err(error_message)` on failure
55    fn unregister_filter(&self, handler_id: usize) -> Result<(), &'static str>;
56
57    /// Get registered filters and their handler IDs
58    ///
59    /// # Returns
60    /// * `Vec<(usize, EventFilter)>` - List of (handler_id, filter) pairs
61    fn get_filters(&self) -> Vec<(usize, EventFilter)>;
62}