Files
mnote/rust/crates/mnote-web/src/routes/sse.rs
T

34 lines
1.1 KiB
Rust
Raw Normal View History

use crate::context::RequestContext;
use axum::extract::Extension;
use axum::response::sse::{Event, KeepAlive, Sse};
use futures_util::stream;
use serde_json::json;
use std::convert::Infallible;
use std::time::Duration;
pub async fn events(
Extension(context): Extension<RequestContext>,
) -> Sse<impl futures_util::Stream<Item = Result<Event, Infallible>>> {
let payload = json!({
"kind": "sse_placeholder",
"requestId": context.trace.request_id,
"traceId": context.trace.trace_id,
"workspaceId": context.workspace.workspace_id,
"notes": [
"当前为 task-062 最小骨架,后续在此对齐统一流式输出协议。",
"此路由预留给 Hermes token/tool/client event 回流。"
]
});
let event = Event::default()
.event("ready")
.json_data(payload)
.expect("SSE 占位事件必须可序列化");
Sse::new(stream::iter(vec![Ok(event)])).keep_alive(
KeepAlive::new()
.interval(Duration::from_secs(15))
.text("keepalive"),
)
}