Skip to main content

starweaver_context/
event.rs

1//! Runtime event compatibility export and append-only event bus.
2
3use serde::{Deserialize, Serialize};
4
5pub use starweaver_core::AgentEvent;
6
7/// Append-only in-memory event bus.
8#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
9pub struct EventBus {
10    events: Vec<AgentEvent>,
11}
12
13impl EventBus {
14    /// Create an empty event bus.
15    #[must_use]
16    pub fn new() -> Self {
17        Self::default()
18    }
19
20    /// Publish one event.
21    pub fn publish(&mut self, event: AgentEvent) {
22        self.events.push(event);
23    }
24
25    /// Return the number of retained events.
26    #[must_use]
27    pub const fn len(&self) -> usize {
28        self.events.len()
29    }
30
31    /// Return whether the event bus is empty.
32    #[must_use]
33    pub const fn is_empty(&self) -> bool {
34        self.events.is_empty()
35    }
36
37    /// Return all events.
38    #[must_use]
39    pub fn events(&self) -> &[AgentEvent] {
40        &self.events
41    }
42
43    /// Drain all events.
44    pub fn drain(&mut self) -> Vec<AgentEvent> {
45        std::mem::take(&mut self.events)
46    }
47}