1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//! Stream source port trait for event-driven data sources.
//!
//! Defines the interface for streaming data sources such as WebSocket feeds,
//! Server-Sent Events (SSE), or message queues. Adapters implement this
//! trait to provide event streams that can integrate into the DAG pipeline.
use async_trait;
use ;
use crateResult;
/// A single event received from a streaming source.
///
/// # Example
///
/// ```
/// use stygian_graph::ports::stream_source::StreamEvent;
///
/// let event = StreamEvent {
/// id: Some("42".into()),
/// event_type: Some("message".into()),
/// data: r#"{"price": 29.99}"#.into(),
/// };
/// assert_eq!(event.event_type.as_deref(), Some("message"));
/// ```
/// Port trait for streaming data sources.
///
/// Implementations connect to event-driven sources and collect events
/// until a termination condition is met (timeout, count limit, or
/// stream close).
///
/// # Example
///
/// ```no_run
/// use stygian_graph::ports::stream_source::{StreamSourcePort, StreamEvent};
///
/// # async fn example(source: impl StreamSourcePort) {
/// let events = source
/// .subscribe("wss://feed.example.com/prices", Some(100))
/// .await
/// .unwrap();
/// for event in &events {
/// println!("got: {}", event.data);
/// }
/// # }
/// ```