> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/relay/llms.txt.
> For full documentation content, see https://docs.nvidia.com/nemo/relay/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/relay/_mcp/server.

# Struct SseEvent Decoder

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

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

```rust
pub 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`

<pre />

#### `new`

<pre />

Creates a new decoder with an empty buffer.

#### `push_bytes`

<pre />

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`](/reference/api/rust-library-reference/nemo-relay/error/enum-flowerror) 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`

<pre />

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`

<pre />

#### `default`

<pre />