anthropic/streaming/sse

Server-Sent Events (SSE) parser for Anthropic streaming responses

This module provides parsing utilities for SSE format used by the Anthropic streaming API. It handles multi-line data fields, event types, keepalives, and malformed events gracefully.

Types

SSE parsing error

pub type SseError {
  InvalidField(line: String)
  EmptyEvent
  InvalidRetry(value: String)
}

Constructors

  • InvalidField(line: String)

    Invalid field format

  • EmptyEvent

    Empty event (no data)

  • InvalidRetry(value: String)

    Invalid retry value

A parsed SSE event

pub type SseEvent {
  SseEvent(
    event_type: option.Option(String),
    data: option.Option(String),
    id: option.Option(String),
    retry: option.Option(Int),
  )
}

Constructors

  • SseEvent(
      event_type: option.Option(String),
      data: option.Option(String),
      id: option.Option(String),
      retry: option.Option(Int),
    )

    Arguments

    event_type

    The event type (e.g., “message_start”, “content_block_delta”)

    data

    The event data (JSON string)

    id

    Event ID (rarely used)

    retry

    Retry interval in milliseconds (rarely used)

Result of parsing SSE data

pub type SseParseResult {
  SseParseResult(events: List(SseEvent), state: SseParserState)
}

Constructors

  • SseParseResult(events: List(SseEvent), state: SseParserState)

    Arguments

    events

    Parsed events

    state

    Updated parser state

Parser state for accumulating SSE events

pub type SseParserState {
  SseParserState(
    current_event_type: option.Option(String),
    current_data: List(String),
    current_id: option.Option(String),
    current_retry: option.Option(Int),
    buffer: String,
  )
}

Constructors

  • SseParserState(
      current_event_type: option.Option(String),
      current_data: List(String),
      current_id: option.Option(String),
      current_retry: option.Option(Int),
      buffer: String,
    )

    Arguments

    current_event_type

    Current event type being parsed

    current_data

    Accumulated data lines

    current_id

    Current event ID

    current_retry

    Current retry value

    buffer

    Buffer for incomplete lines

Values

pub fn flush(state: SseParserState) -> Result(SseEvent, SseError)

Flush any remaining data in the buffer as a final event

pub fn get_data(event: SseEvent) -> String

Get the data as a string, defaulting to empty string

pub fn get_event_type(event: SseEvent) -> String

Get the event type as a string, defaulting to “message” if not specified

pub fn is_keepalive(event: SseEvent) -> Bool

Check if an SSE event is a keepalive/ping

pub fn new_parser_state() -> SseParserState

Create a new parser state

pub fn parse_chunk(
  state: SseParserState,
  chunk: String,
) -> SseParseResult

Parse a chunk of SSE data, returning parsed events and updated state

This function handles partial events that span multiple chunks by maintaining a buffer in the parser state.

pub fn parse_event(
  event_block: String,
) -> Result(SseEvent, SseError)

Parse a single SSE event from a complete event block (lines separated by \n)

pub fn parse_event_lines(
  lines: List(String),
) -> Result(SseEvent, SseError)

Parse SSE event from a list of lines

pub fn parse_line(
  state: SseParserState,
  line: String,
) -> SseParserState

Parse a single line and update parser state

pub fn reset_event_state(state: SseParserState) -> SseParserState

Reset parser state for next event (keeps buffer)

pub fn sse_event(
  event_type: option.Option(String),
  data: option.Option(String),
) -> SseEvent

Create an SSE event (primarily for testing)

pub fn sse_event_full(
  event_type: option.Option(String),
  data: option.Option(String),
  id: option.Option(String),
  retry: option.Option(Int),
) -> SseEvent

Create an SSE event with all fields

Search Document