MCPcopy Create free account
hub / github.com/Louisym/MiniCC / parse_frame

Function parse_frame

rust/crates/api/src/sse.rs:63–101  ·  view source on GitHub ↗
(frame: &str)

Source from the content-addressed store, hash-verified

61}
62
63pub fn parse_frame(frame: &str) -> Result<Option<StreamEvent>, ApiError> {
64 let trimmed = frame.trim();
65 if trimmed.is_empty() {
66 return Ok(None);
67 }
68
69 let mut data_lines = Vec::new();
70 let mut event_name: Option<&str> = None;
71
72 for line in trimmed.lines() {
73 if line.starts_with(':') {
74 continue;
75 }
76 if let Some(name) = line.strip_prefix("event:") {
77 event_name = Some(name.trim());
78 continue;
79 }
80 if let Some(data) = line.strip_prefix("data:") {
81 data_lines.push(data.trim_start());
82 }
83 }
84
85 if matches!(event_name, Some("ping")) {
86 return Ok(None);
87 }
88
89 if data_lines.is_empty() {
90 return Ok(None);
91 }
92
93 let payload = data_lines.join("\n");
94 if payload == "[DONE]" {
95 return Ok(None);
96 }
97
98 serde_json::from_str::<StreamEvent>(&payload)
99 .map(Some)
100 .map_err(ApiError::from)
101}
102
103#[cfg(test)]
104mod tests {

Callers 5

pushMethod · 0.85
finishMethod · 0.85
parses_single_frameFunction · 0.85

Calls 1

pushMethod · 0.45

Tested by 3

parses_single_frameFunction · 0.68