Generated from cargo doc --no-deps -p nemo-relay -p nemo-relay-adaptive -p nemo-relay-ffi.
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.
impl SseEventDecoderimpl SseEventDecoder
newpub fn new() -> Self
Creates a new decoder with an empty buffer.
push_bytespub 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.
finishpub 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.
impl Default for SseEventDecoderimpl Default for SseEventDecoder
defaultfn default() -> SseEventDecoder