1#[cfg(any(
4 feature = "component",
5 feature = "disk",
6 feature = "network",
7 feature = "system",
8 feature = "user"
9))]
10use serde::{ser::SerializeStruct, Serialize, Serializer};
11
12#[cfg(feature = "disk")]
13impl Serialize for crate::Disk {
14 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
15 where
16 S: Serializer,
17 {
18 let mut state = serializer.serialize_struct("Disk", 7)?;
20
21 state.serialize_field("DiskKind", &self.kind())?;
22 if let Some(s) = self.name().to_str() {
23 state.serialize_field("name", s)?;
24 }
25 state.serialize_field("file_system", &self.file_system())?;
26 state.serialize_field("mount_point", &self.mount_point())?;
27 state.serialize_field("total_space", &self.total_space())?;
28 state.serialize_field("available_space", &self.available_space())?;
29 state.serialize_field("is_removable", &self.is_removable())?;
30
31 state.end()
32 }
33}
34
35#[cfg(feature = "disk")]
36impl Serialize for crate::Disks {
37 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
38 where
39 S: Serializer,
40 {
41 serializer.collect_seq(self.iter())
42 }
43}
44
45#[cfg(feature = "disk")]
46impl Serialize for crate::DiskKind {
47 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
48 where
49 S: Serializer,
50 {
51 let (index, variant, maybe_value) = match *self {
52 Self::HDD => (0, "HDD", None),
53 Self::SSD => (1, "SSD", None),
54 Self::Unknown(ref s) => (2, "Unknown", Some(s)),
55 };
56
57 if let Some(ref value) = maybe_value {
58 serializer.serialize_newtype_variant("DiskKind", index, variant, value)
59 } else {
60 serializer.serialize_unit_variant("DiskKind", index, variant)
61 }
62 }
63}
64
65#[cfg(feature = "system")]
66impl Serialize for crate::Pid {
67 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
68 where
69 S: Serializer,
70 {
71 serializer.serialize_newtype_struct("Pid", &self.to_string())
72 }
73}
74
75#[cfg(feature = "system")]
76impl Serialize for crate::Process {
77 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
78 where
79 S: Serializer,
80 {
81 let mut state = serializer.serialize_struct("Process", 19)?;
83
84 state.serialize_field("name", &self.name())?;
85 state.serialize_field("cmd", &self.cmd())?;
86 state.serialize_field("exe", &self.exe())?;
87 state.serialize_field("pid", &self.pid().as_u32())?;
88 state.serialize_field("environ", &self.environ())?;
89 state.serialize_field("cwd", &self.cwd())?;
90 state.serialize_field("root", &self.root())?;
91 state.serialize_field("memory", &self.memory())?;
92 state.serialize_field("virtual_memory", &self.virtual_memory())?;
93 state.serialize_field("parent", &self.parent())?;
94 state.serialize_field("status", &self.status())?;
95 state.serialize_field("start_time", &self.start_time())?;
96 state.serialize_field("run_time", &self.run_time())?;
97 state.serialize_field("cpu_usage", &self.cpu_usage())?;
98 state.serialize_field("disk_usage", &self.disk_usage())?;
99 state.serialize_field("user_id", &self.user_id())?;
100 state.serialize_field("group_id", &self.group_id())?;
101 state.serialize_field("session_id", &self.session_id())?;
102
103 state.end()
104 }
105}
106
107#[cfg(feature = "system")]
108impl Serialize for crate::Cpu {
109 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
110 where
111 S: Serializer,
112 {
113 let mut state = serializer.serialize_struct("Cpu", 5)?;
115
116 state.serialize_field("cpu_usage", &self.cpu_usage())?;
117 state.serialize_field("name", &self.name())?;
118 state.serialize_field("vendor_id", &self.vendor_id())?;
119 state.serialize_field("brand", &self.brand())?;
120 state.serialize_field("frequency", &self.frequency())?;
121
122 state.end()
123 }
124}
125
126#[cfg(feature = "system")]
127impl serde::Serialize for crate::System {
128 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
129 where
130 S: serde::Serializer,
131 {
132 let mut state = serializer.serialize_struct("System", 19)?;
134
135 state.serialize_field("global_cpu_usage", &self.global_cpu_usage())?;
136 state.serialize_field("cpus", &self.cpus())?;
137
138 state.serialize_field("physical_core_count", &self.physical_core_count())?;
139 state.serialize_field("total_memory", &self.total_memory())?;
140 state.serialize_field("free_memory", &self.free_memory())?;
141 state.serialize_field("available_memory", &self.available_memory())?;
142 state.serialize_field("used_memory", &self.used_memory())?;
143 state.serialize_field("total_swap", &self.total_swap())?;
144 state.serialize_field("free_swap", &self.free_swap())?;
145 state.serialize_field("used_swap", &self.used_swap())?;
146
147 state.serialize_field("uptime", &Self::uptime())?;
148 state.serialize_field("boot_time", &Self::boot_time())?;
149 state.serialize_field("load_average", &Self::load_average())?;
150 state.serialize_field("name", &Self::name())?;
151 state.serialize_field("kernel_version", &Self::kernel_version())?;
152 state.serialize_field("os_version", &Self::os_version())?;
153 state.serialize_field("long_os_version", &Self::long_os_version())?;
154 state.serialize_field("distribution_id", &Self::distribution_id())?;
155 state.serialize_field("host_name", &Self::host_name())?;
156
157 state.end()
158 }
159}
160
161#[cfg(feature = "system")]
162impl Serialize for crate::CGroupLimits {
163 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
164 where
165 S: Serializer,
166 {
167 let mut state = serializer.serialize_struct("CGroupLimits", 3)?;
169
170 state.serialize_field("total_memory", &self.total_memory)?;
171 state.serialize_field("free_memory", &self.free_memory)?;
172 state.serialize_field("free_swap", &self.free_swap)?;
173
174 state.end()
175 }
176}
177
178#[cfg(feature = "system")]
179impl Serialize for crate::ThreadKind {
180 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
181 where
182 S: Serializer,
183 {
184 let (index, variant) = match *self {
185 Self::Kernel => (0, "Kernel"),
186 Self::Userland => (1, "Userland"),
187 };
188
189 serializer.serialize_unit_variant("ThreadKind", index, variant)
190 }
191}
192
193#[cfg(feature = "system")]
194impl Serialize for crate::Signal {
195 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
196 where
197 S: Serializer,
198 {
199 let (index, variant) = match *self {
200 Self::Hangup => (0, "Hangup"),
201 Self::Interrupt => (1, "Interrupt"),
202 Self::Quit => (2, "Quit"),
203 Self::Illegal => (3, "Illegal"),
204 Self::Trap => (4, "Trap"),
205 Self::Abort => (5, "Abort"),
206 Self::IOT => (6, "IOT"),
207 Self::Bus => (7, "Bus"),
208 Self::FloatingPointException => (8, "FloatingPointException"),
209 Self::Kill => (9, "Kill"),
210 Self::User1 => (10, "User1"),
211 Self::Segv => (11, "Segv"),
212 Self::User2 => (12, "User2"),
213 Self::Pipe => (13, "Pipe"),
214 Self::Alarm => (14, "Alarm"),
215 Self::Term => (15, "Term"),
216 Self::Child => (16, "Child"),
217 Self::Continue => (17, "Continue"),
218 Self::Stop => (18, "Stop"),
219 Self::TSTP => (19, "TSTP"),
220 Self::TTIN => (20, "TTIN"),
221 Self::TTOU => (21, "TTOU"),
222 Self::Urgent => (22, "Urgent"),
223 Self::XCPU => (23, "XCPU"),
224 Self::XFSZ => (24, "XFSZ"),
225 Self::VirtualAlarm => (25, "VirtualAlarm"),
226 Self::Profiling => (26, "Profiling"),
227 Self::Winch => (27, "Winch"),
228 Self::IO => (28, "IO"),
229 Self::Poll => (29, "Poll"),
230 Self::Power => (30, "Power"),
231 Self::Sys => (31, "Sys"),
232 };
233
234 serializer.serialize_unit_variant("Signal", index, variant)
235 }
236}
237
238#[cfg(feature = "system")]
239impl Serialize for crate::LoadAvg {
240 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
241 where
242 S: Serializer,
243 {
244 let mut state = serializer.serialize_struct("LoadAvg", 3)?;
246
247 state.serialize_field("one", &self.one)?;
248 state.serialize_field("five", &self.five)?;
249 state.serialize_field("fifteen", &self.fifteen)?;
250 state.end()
251 }
252}
253
254#[cfg(feature = "system")]
255impl Serialize for crate::ProcessStatus {
256 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
257 where
258 S: Serializer,
259 {
260 let (index, variant, maybe_value) = match *self {
261 Self::Idle => (0, "Idle", None),
262 Self::Run => (1, "Run", None),
263 Self::Sleep => (2, "Sleep", None),
264 Self::Stop => (3, "Stop", None),
265 Self::Zombie => (4, "Zombie", None),
266 Self::Tracing => (5, "Tracing", None),
267 Self::Dead => (6, "Dead", None),
268 Self::Wakekill => (7, "Wakekill", None),
269 Self::Waking => (8, "Waking", None),
270 Self::Parked => (9, "Parked", None),
271 Self::LockBlocked => (10, "LockBlocked", None),
272 Self::UninterruptibleDiskSleep => (11, "UninterruptibleDiskSleep", None),
273 Self::Unknown(n) => (12, "Unknown", Some(n)),
274 };
275
276 if let Some(ref value) = maybe_value {
277 serializer.serialize_newtype_variant("ProcessStatus", index, variant, value)
278 } else {
279 serializer.serialize_unit_variant("ProcessStatus", index, variant)
280 }
281 }
282}
283
284#[cfg(feature = "system")]
285impl Serialize for crate::DiskUsage {
286 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
287 where
288 S: Serializer,
289 {
290 let mut state = serializer.serialize_struct("DiskUsage", 4)?;
292
293 state.serialize_field("total_written_bytes", &self.total_written_bytes)?;
294 state.serialize_field("written_bytes", &self.written_bytes)?;
295 state.serialize_field("total_read_bytes", &self.total_read_bytes)?;
296 state.serialize_field("read_bytes", &self.read_bytes)?;
297
298 state.end()
299 }
300}
301
302#[cfg(feature = "component")]
303impl Serialize for crate::Components {
304 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
305 where
306 S: Serializer,
307 {
308 serializer.collect_seq(self.iter())
309 }
310}
311
312#[cfg(feature = "component")]
313impl Serialize for crate::Component {
314 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
315 where
316 S: Serializer,
317 {
318 let mut state = serializer.serialize_struct("Component", 4)?;
320
321 state.serialize_field("temperature", &self.temperature())?;
322 state.serialize_field("max", &self.max())?;
323 state.serialize_field("critical", &self.critical())?;
324 state.serialize_field("label", &self.label())?;
325
326 state.end()
327 }
328}
329
330#[cfg(feature = "network")]
331impl Serialize for crate::Networks {
332 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
333 where
334 S: Serializer,
335 {
336 serializer.collect_seq(self.iter())
337 }
338}
339
340#[cfg(feature = "network")]
341impl Serialize for crate::NetworkData {
342 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
343 where
344 S: Serializer,
345 {
346 let mut state = serializer.serialize_struct("NetworkData", 14)?;
348
349 state.serialize_field("received", &self.received())?;
350 state.serialize_field("total_received", &self.total_received())?;
351 state.serialize_field("transmitted", &self.transmitted())?;
352 state.serialize_field("total_transmitted", &self.total_transmitted())?;
353 state.serialize_field("packets_received", &self.packets_received())?;
354 state.serialize_field("total_packets_received", &self.total_packets_received())?;
355 state.serialize_field("packets_transmitted", &self.packets_transmitted())?;
356 state.serialize_field(
357 "total_packets_transmitted",
358 &self.total_packets_transmitted(),
359 )?;
360 state.serialize_field("errors_on_received", &self.errors_on_received())?;
361 state.serialize_field("total_errors_on_received", &self.total_errors_on_received())?;
362 state.serialize_field("errors_on_transmitted", &self.errors_on_transmitted())?;
363 state.serialize_field(
364 "total_errors_on_transmitted",
365 &self.total_errors_on_transmitted(),
366 )?;
367 state.serialize_field("mac_address", &self.mac_address())?;
368 state.serialize_field("ip_networks", &self.ip_networks())?;
369 state.serialize_field("mtu", &self.mtu())?;
370
371 state.end()
372 }
373}
374
375#[cfg(feature = "network")]
376impl Serialize for crate::MacAddr {
377 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
378 where
379 S: Serializer,
380 {
381 serializer.serialize_newtype_struct("MacAddr", &self.0)
382 }
383}
384
385#[cfg(feature = "network")]
386impl Serialize for crate::IpNetwork {
387 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
388 where
389 S: Serializer,
390 {
391 let mut state = serializer.serialize_struct("IpNetwork", 2)?;
392
393 state.serialize_field("addr", &self.addr)?;
394 state.serialize_field("prefix", &self.prefix)?;
395
396 state.end()
397 }
398}
399
400#[cfg(feature = "user")]
401impl Serialize for crate::Users {
402 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
403 where
404 S: Serializer,
405 {
406 serializer.collect_seq(self.iter())
407 }
408}
409
410#[cfg(feature = "user")]
411impl Serialize for crate::User {
412 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
413 where
414 S: Serializer,
415 {
416 let mut state = serializer.serialize_struct("User", 4)?;
418
419 state.serialize_field("id", &self.id())?;
420 state.serialize_field("group_id", &self.group_id())?;
421 state.serialize_field("name", &self.name())?;
422 state.serialize_field("groups", &self.groups())?;
423
424 state.end()
425 }
426}
427
428#[cfg(feature = "user")]
429impl Serialize for crate::Group {
430 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
431 where
432 S: Serializer,
433 {
434 let mut state = serializer.serialize_struct("Group", 2)?;
436
437 state.serialize_field("id", &self.id())?;
438 state.serialize_field("name", &self.name())?;
439
440 state.end()
441 }
442}
443
444#[cfg(any(feature = "user", feature = "system"))]
445impl Serialize for crate::Gid {
446 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
447 where
448 S: Serializer,
449 {
450 serializer.serialize_newtype_struct("Gid", &self.to_string())
451 }
452}
453
454#[cfg(any(feature = "user", feature = "system"))]
455impl Serialize for crate::Uid {
456 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
457 where
458 S: Serializer,
459 {
460 serializer.serialize_newtype_struct("Uid", &self.to_string())
461 }
462}