starweaver_runtime/
stream.rs1use serde::{Deserialize, Serialize};
4
5use crate::AgentResult;
6
7pub use starweaver_stream::{
8 AgentSidebandEvent, AgentSidebandEventCategory, AgentStreamEvent, AgentStreamRecord,
9 AgentStreamSink, AgentStreamSource, AgentStreamSourceKind,
10};
11
12#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
14pub struct AgentStreamResult {
15 pub result: AgentResult,
17 pub events: Vec<AgentStreamRecord>,
19}
20
21impl AgentStreamResult {
22 #[must_use]
24 pub fn events(&self) -> &[AgentStreamRecord] {
25 &self.events
26 }
27
28 #[must_use]
30 pub const fn result(&self) -> &AgentResult {
31 &self.result
32 }
33
34 pub fn raw_json_records(&self) -> serde_json::Result<Vec<serde_json::Value>> {
40 self.events
41 .iter()
42 .map(AgentStreamRecord::to_raw_json)
43 .collect()
44 }
45}
46
47pub(crate) fn push_stream_event(
48 events: &mut Option<&mut Vec<AgentStreamRecord>>,
49 event: AgentStreamEvent,
50) {
51 if let Some(events) = events.as_deref_mut() {
52 events.push(AgentStreamRecord::new(events.len(), event));
53 }
54}
55
56pub(crate) fn push_stream_record(
57 events: &mut Option<&mut Vec<AgentStreamRecord>>,
58 record: AgentStreamRecord,
59) {
60 if let Some(events) = events.as_deref_mut() {
61 events.push(record.with_sequence(events.len()));
62 }
63}