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}