Skip to main content

Crate claude_stream

Crate claude_stream 

Source
Expand description

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}");
            }
        }
        _ => {}
    }
}

Structs§

EventParser
Incremental SSE parser for Anthropic’s messages stream.
Message
The message shell carried by Event::MessageStart.
MessageDelta
Top-level message delta.
Usage
Token usage. Field set evolves; we keep optional everywhere.

Enums§

ContentBlock
One content block (passed by Event::ContentBlockStart).
Delta
One delta extending an in-progress content block.
Event
One Anthropic streaming event.
ParseError
Errors from parsing one event.