micromegas_tracing/
process_info.rs1use std::collections::HashMap;
3
4use serde::{Deserialize, Serialize};
5
6mod uuid_serde {
7 use serde::{self, Deserialize, Deserializer, Serializer};
8
9 pub fn uuid_to_string<S>(id: &uuid::Uuid, serializer: S) -> Result<S::Ok, S::Error>
10 where
11 S: Serializer,
12 {
13 serializer.serialize_str(&id.to_string())
14 }
15
16 pub fn uuid_from_string<'de, D>(deserializer: D) -> Result<uuid::Uuid, D::Error>
17 where
18 D: Deserializer<'de>,
19 {
20 let s = String::deserialize(deserializer)?;
21 uuid::Uuid::try_parse(&s).map_err(serde::de::Error::custom)
22 }
23
24 pub fn opt_uuid_to_string<S>(id: &Option<uuid::Uuid>, serializer: S) -> Result<S::Ok, S::Error>
25 where
26 S: Serializer,
27 {
28 match id {
29 Some(id) => serializer.serialize_some(&id.to_string()),
30 None => serializer.serialize_none(),
31 }
32 }
33
34 pub fn opt_uuid_from_string<'de, D>(deserializer: D) -> Result<Option<uuid::Uuid>, D::Error>
35 where
36 D: Deserializer<'de>,
37 {
38 let s: Option<String> = Option::deserialize(deserializer)?;
39 match s {
40 Some(s) if s.is_empty() => Ok(None),
41 Some(s) => uuid::Uuid::try_parse(&s)
42 .map(Some)
43 .map_err(serde::de::Error::custom),
44 None => Ok(None),
45 }
46 }
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct ProcessInfo {
51 #[serde(
52 deserialize_with = "uuid_serde::uuid_from_string",
53 serialize_with = "uuid_serde::uuid_to_string"
54 )]
55 pub process_id: uuid::Uuid,
56 pub exe: String,
57 pub username: String,
58 pub realname: String,
59 pub computer: String,
60 pub distro: String,
61 pub cpu_brand: String,
62 pub tsc_frequency: i64,
63 pub start_time: chrono::DateTime<chrono::Utc>,
65 pub start_ticks: i64,
66 #[serde(
67 deserialize_with = "uuid_serde::opt_uuid_from_string",
68 serialize_with = "uuid_serde::opt_uuid_to_string"
69 )]
70 pub parent_process_id: Option<uuid::Uuid>,
71 pub properties: HashMap<String, String>,
72}