use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub struct ProgressEvent {
pub step: String,
pub message: String,
pub progress: f64,
pub status: Option<String>,
#[serde(flatten)]
pub extra: serde_json::Value,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_deserialize_progress_event() {
let json = r#"{"step":"chunking","message":"Splitting into chunks","progress":45.0,"status":"processing"}"#;
let event: ProgressEvent = serde_json::from_str(json).unwrap();
assert_eq!(event.step, "chunking");
assert_eq!(event.progress, 45.0);
assert_eq!(event.status.as_deref(), Some("processing"));
}
#[test]
fn test_deserialize_progress_event_with_extras() {
let json = r#"{"step":"batch_progress","message":"Processing","progress":50.0,"document_id":"abc-123","total":10,"completed":5}"#;
let event: ProgressEvent = serde_json::from_str(json).unwrap();
assert_eq!(event.step, "batch_progress");
assert_eq!(event.extra["document_id"], "abc-123");
assert_eq!(event.extra["total"], 10);
}
}