1#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
5pub enum SnapshotEvent {
6 Log(String),
7 SetStatus(String),
8 InitProgress(usize),
9 IncrementProgress,
10 Perf(String, String, u128), }
12
13#[cfg(test)]
14mod tests {
15 use super::*;
16
17 #[test]
18 fn snapshot_event_round_trips_through_json() {
19 let events = vec![
20 SnapshotEvent::Log("hello".to_string()),
21 SnapshotEvent::SetStatus("uploading".to_string()),
22 SnapshotEvent::InitProgress(5),
23 SnapshotEvent::IncrementProgress,
24 SnapshotEvent::Perf("upload".to_string(), "content".to_string(), 42),
25 ];
26
27 for event in events {
28 let json = serde_json::to_string(&event).expect("serialize");
29 let round_tripped: SnapshotEvent = serde_json::from_str(&json).expect("deserialize");
30 assert_eq!(format!("{event:?}"), format!("{round_tripped:?}"));
32 }
33 }
34
35 #[test]
36 fn snapshot_event_debug_output_contains_payload() {
37 let event = SnapshotEvent::Perf("hash".to_string(), "file.dat".to_string(), 123);
38 let debug = format!("{event:?}");
39 assert!(debug.contains("hash"));
40 assert!(debug.contains("file.dat"));
41 assert!(debug.contains("123"));
42 }
43}