Skip to main content

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}