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
//! Parse Anthropic's Server-Sent Events stream into typed events.
//!
//! No SDK dependency. Build it into whatever HTTP client / async runtime
//! you already have: feed [`EventParser::feed`] bytes as they arrive,
//! drain ready events with [`EventParser::next_event`].
//!
//! # Quick start
//!
//! ```
//! use claude_stream::{EventParser, Event};
//!
//! // Wire bytes Anthropic sent us:
//! let chunk = b"event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"id\":\"msg_1\",\"role\":\"assistant\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Hello\"}}\n\n";
//!
//! let mut parser = EventParser::new();
//! parser.feed(chunk);
//!
//! // Drain everything ready:
//! while let Some(event) = parser.next_event().unwrap() {
//! match event {
//! Event::MessageStart { message } => println!("started: {}", message.id),
//! Event::ContentBlockDelta { delta, .. } => {
//! if let claude_stream::Delta::TextDelta { text } = delta {
//! print!("{text}");
//! }
//! }
//! _ => {}
//! }
//! }
//! ```
pub use crate;
pub use crateEventParser;