rsiot/message/
msg_trace.rs1use std::collections::HashSet;
2
3use serde::{Deserialize, Serialize};
4use uuid::Uuid;
5
6use super::Timestamp;
7
8#[derive(Debug, Clone, Deserialize, PartialEq, Serialize)]
10struct MsgTraceItem {
11 id: Uuid,
12 ts: Timestamp,
13 }
15
16#[derive(Debug, Default, Clone, Deserialize, PartialEq, Serialize)]
18pub struct MsgTrace(Vec<MsgTraceItem>);
19
20impl MsgTrace {
21 pub fn generate_uuid() -> Uuid {
25 Uuid::new_v4()
26 }
27
28 pub fn add_trace_item(&mut self, id: Uuid) {
30 let ts = Timestamp::default();
31 let value = MsgTraceItem { ts, id };
32 self.0.push(value);
33 }
34
35 pub fn contains_trace_item(&self, id: &Uuid) -> bool {
37 self.0.iter().any(|tv| &tv.id == id)
38 }
39
40 pub fn get_ids(self) -> HashSet<Uuid> {
42 self.0.iter().map(|i| i.id).collect()
43 }
44}