mod ag_ui_classify;
mod control_classify;
pub mod sse;
mod sse_frame;
mod stream_end_reason;
pub use ag_ui_classify::{AgUiParseDispatch, classify_ag_ui_sse_data};
pub use control_classify::{classify_sse_control_outcome, key_present_non_null};
pub use sse_frame::{
extract_stream_ended_reason, is_sse_done_sentinel, join_sse_data_lines, parse_sse_event_id,
};
pub use stream_end_reason::StreamEndReason;
pub const SSE_PROTOCOL_VERSION: u8 = 2;
pub const SSE_TERMINAL_ORDER_SAVED_BEFORE_FINISHED: &str = "saved_before_finished";
#[cfg(test)]
mod tests {
use super::SSE_PROTOCOL_VERSION;
use std::path::PathBuf;
#[test]
fn sse_protocol_md_lists_current_version() {
let root = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
let zh = root.join("docs/SSE协议.md");
let en = root.join("docs/en/SSE_PROTOCOL.md");
let zh_s =
std::fs::read_to_string(&zh).unwrap_or_else(|e| panic!("read {}: {e}", zh.display()));
let en_s =
std::fs::read_to_string(&en).unwrap_or_else(|e| panic!("read {}: {e}", en.display()));
let needle = format!("**`{SSE_PROTOCOL_VERSION}`**");
assert!(
zh_s.contains(&needle),
"{} must contain current version marker {needle}",
zh.display()
);
assert!(
en_s.contains(&needle),
"{} must contain current version marker {needle}",
en.display()
);
}
}