qubit_http/sse/sse_chunk.rs
1/*******************************************************************************
2 *
3 * Copyright (c) 2025 - 2026 Haixing Hu.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 *
7 * Licensed under the Apache License, Version 2.0.
8 *
9 ******************************************************************************/
10//! Decoded JSON chunk or explicit SSE stream end marker.
11//!
12
13use serde::{
14 Deserialize,
15 Serialize,
16};
17use strum::{
18 Display,
19 EnumString,
20};
21
22/// Either a decoded JSON value from one SSE data payload or an explicit end marker.
23#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Display, EnumString)]
24#[serde(bound(
25 serialize = "T: serde::Serialize",
26 deserialize = "T: serde::de::DeserializeOwned"
27))]
28#[serde(rename_all = "snake_case")]
29#[strum(serialize_all = "snake_case")]
30pub enum SseChunk<T> {
31 /// Successfully deserialized JSON object.
32 #[strum(disabled)]
33 Data(T),
34 /// Synthetic item emitted when [`DoneMarkerPolicy`](crate::sse::DoneMarkerPolicy)
35 /// matches (then stream ends).
36 Done,
37}