dw_transform/
sort.rs

1use dw_models::Event;
2
3/// Sort a list of events by timestamp
4pub fn sort_by_timestamp(mut events: Vec<Event>) -> Vec<Event> {
5    events.sort_by(|e1, e2| e1.timestamp.cmp(&e2.timestamp));
6    events
7}
8
9/// Sort a list of events by duration with the highest duration first
10pub fn sort_by_duration(mut events: Vec<Event>) -> Vec<Event> {
11    events.sort_by(|e1, e2| e2.duration.cmp(&e1.duration));
12    events
13}
14
15#[cfg(test)]
16mod tests {
17    use std::str::FromStr;
18
19    use chrono::DateTime;
20    use chrono::Duration;
21    use serde_json::json;
22
23    use dw_models::Event;
24
25    use super::{sort_by_duration, sort_by_timestamp};
26
27    #[test]
28    fn test_sort_by_timestamp() {
29        let e1 = Event {
30            id: None,
31            timestamp: DateTime::from_str("2000-01-01T00:00:00Z").unwrap(),
32            duration: Duration::seconds(1),
33            data: json_map! {"test": json!(1)},
34        };
35        let e2 = Event {
36            id: None,
37            timestamp: DateTime::from_str("2000-01-01T00:00:03Z").unwrap(),
38            duration: Duration::seconds(1),
39            data: json_map! {"test": json!(1)},
40        };
41        let res = sort_by_timestamp(vec![e2.clone(), e1.clone()]);
42        assert_eq!(res, vec![e1, e2]);
43    }
44
45    #[test]
46    fn test_sort_by_duration() {
47        let e1 = Event {
48            id: None,
49            timestamp: DateTime::from_str("2000-01-01T00:00:00Z").unwrap(),
50            duration: Duration::seconds(2),
51            data: json_map! {"test": json!(1)},
52        };
53        let e2 = Event {
54            id: None,
55            timestamp: DateTime::from_str("2000-01-01T00:00:03Z").unwrap(),
56            duration: Duration::seconds(1),
57            data: json_map! {"test": json!(1)},
58        };
59        let res = sort_by_duration(vec![e2.clone(), e1.clone()]);
60        assert_eq!(res, vec![e1, e2]);
61    }
62}