Struct SseEvent Decoder

View as Markdown

Generated from cargo doc --no-deps -p nemo-relay -p nemo-relay-adaptive -p nemo-relay-ffi.

1pub struct SseEventDecoder { /* private fields */ }

Incremental decoder for text/event-stream byte streams that yields one JSON object per complete data: payload.

SSE frames are separated by blank lines (\n\n); each frame may contain event: and data: lines. Anthropic Messages, OpenAI Responses, and OpenAI Chat Completions all emit one JSON object per data: line, so the decoder buffers received bytes, splits on frame boundaries, parses the JSON payload, and tags it with the frame’s event name when present.

The decoder is byte-stream-friendly: it accumulates partial frames across chunks and emits completed frames only when their terminating blank line arrives. Bytes after the last terminator are retained for the next call.

Implementations

impl SseEventDecoder

impl SseEventDecoder

new

pub fn new() -> Self

Creates a new decoder with an empty buffer.

push_bytes

pub fn push_bytes(&mut self, bytes: &[u8]) -> Result<Vec<SseEvent>>

Appends bytes to the internal buffer and returns every now-complete SSE event.

Bytes are interpreted as UTF-8 with replacement characters for invalid sequences; provider SSE streams are well-formed UTF-8 in practice, but lossy decoding keeps the decoder honest rather than failing on a single corrupt chunk.

Returns Ok(events) containing zero or more events whose data: payloads parsed successfully. Frames whose data: line is non-empty but does not parse as JSON are surfaced as FlowError::Internal so the caller can decide whether to abort the stream or skip the frame; frames with no data: line at all (e.g. SSE heartbeats) are silently dropped.

finish

pub fn finish(self) -> Result<Option<SseEvent>>

Drains any remaining buffered frame at end of stream.

Most well-formed SSE streams end with a terminating blank line, in which case this returns Ok(None). Stops with no terminator are surfaced as a final partial frame so observability captures the last bytes the upstream sent before disconnect.

Trait Implementations

impl Default for SseEventDecoder

impl Default for SseEventDecoder

default

fn default() -> SseEventDecoder