qubit_http/sse/done_marker_policy.rs
1/*******************************************************************************
2 *
3 * Copyright (c) 2025 - 2026.
4 * Haixing Hu, Qubit Co. Ltd.
5 *
6 * All rights reserved.
7 *
8 ******************************************************************************/
9//! # Done Marker Policy
10//!
11//! Defines how stream completion markers are recognized.
12//!
13//! # Author
14//!
15//! Haixing Hu
16
17/// Policy for stream completion marker matching.
18#[derive(Debug, Clone, PartialEq, Eq, Default)]
19pub enum DoneMarkerPolicy {
20 /// Disable done marker recognition.
21 Disabled,
22 /// Use default marker: `[DONE]`.
23 #[default]
24 DefaultDone,
25 /// Use a custom marker string.
26 Custom(String),
27}
28
29impl DoneMarkerPolicy {
30 /// Returns whether `payload` (trimmed) signals end-of-stream per this policy.
31 ///
32 /// # Parameters
33 /// - `payload`: Typically trimmed SSE `data:` text.
34 ///
35 /// # Returns
36 /// `true` when the stream should stop emitting data chunks (e.g. `[DONE]`).
37 pub fn is_done(&self, payload: &str) -> bool {
38 match self {
39 DoneMarkerPolicy::Disabled => false,
40 DoneMarkerPolicy::DefaultDone => payload.trim() == "[DONE]",
41 DoneMarkerPolicy::Custom(marker) => payload.trim() == marker.trim(),
42 }
43 }
44}