| 280 | } |
| 281 | |
| 282 | async fn save_trace_events(&self, id: &str, events: &[TraceEvent]) -> Result<()> { |
| 283 | let path = self.trace_path(id); |
| 284 | if let Some(parent) = path.parent() { |
| 285 | fs::create_dir_all(parent).await.with_context(|| { |
| 286 | format!("Failed to create trace directory: {}", parent.display()) |
| 287 | })?; |
| 288 | } |
| 289 | |
| 290 | let json = serde_json::to_string_pretty(events) |
| 291 | .with_context(|| format!("Failed to serialize trace events for session {id}"))?; |
| 292 | fs::write(&path, json) |
| 293 | .await |
| 294 | .with_context(|| format!("Failed to write trace events to {}", path.display()))?; |
| 295 | Ok(()) |
| 296 | } |
| 297 | |
| 298 | async fn load_trace_events(&self, id: &str) -> Result<Option<Vec<TraceEvent>>> { |
| 299 | let path = self.trace_path(id); |