1use dw_models::Event;
2
3pub 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
9pub 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}