rsiot_messages_core/
msg_trace.rs

1//! Структуры для представления пути сообщения
2
3use std::collections::HashSet;
4
5use serde::{Deserialize, Serialize};
6use uuid::Uuid;
7
8use crate::Timestamp;
9
10#[derive(Debug, Clone, Deserialize, PartialEq, Serialize)]
11struct TraceValue {
12    id: Uuid,
13    ts: Timestamp,
14    name: String,
15}
16
17#[derive(Debug, Default, Clone, Deserialize, PartialEq, Serialize)]
18pub struct MsgTrace(Vec<TraceValue>);
19
20impl MsgTrace {
21    pub fn generate_uuid() -> Uuid {
22        Uuid::new_v4()
23    }
24
25    pub fn insert(&mut self, id: Uuid, name: String) {
26        let ts = Timestamp::default();
27        let value = TraceValue { ts, name, id };
28        self.0.push(value);
29    }
30
31    pub fn contains_key(&self, id: &Uuid) -> bool {
32        self.0.iter().any(|tv| &tv.id == id)
33    }
34
35    /// Возвращает все идентификаторы пути сообщения
36    pub fn get_ids(self) -> HashSet<Uuid> {
37        self.0.iter().map(|i| i.id).collect()
38    }
39}