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}