leenfetch_core/
system_info.rs1use serde::{Deserialize, Serialize};
2
3use crate::{core::Data, modules::enums::SongInfo};
4
5pub const PROTOCOL_VERSION: u32 = 1;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct SystemInfo {
10 pub protocol_version: u32,
11 pub username: Option<String>,
12 pub hostname: Option<String>,
13 pub host: Option<String>,
14 pub os: Option<String>,
15 pub distro: Option<String>,
16 pub model: Option<String>,
17 pub kernel: Option<String>,
18 pub os_age: Option<String>,
19 pub uptime: Option<String>,
20 pub packages: Option<String>,
21 pub shell: Option<String>,
22 pub wm: Option<String>,
23 pub de: Option<String>,
24 pub cpu: Option<String>,
25 pub gpu: Option<Vec<String>>,
26 pub memory: Option<String>,
27 pub disk: Option<Vec<(String, String)>>,
28 pub resolution: Option<String>,
29 pub theme: Option<String>,
30 pub battery: Option<Vec<String>>,
31 pub song: Option<SongInfo>,
32 pub colors: Option<String>,
33}
34
35impl From<Data> for SystemInfo {
36 fn from(value: Data) -> Self {
37 let host = match (&value.username, &value.hostname) {
38 (Some(user), Some(host)) => Some(format!("{user}@{host}")),
39 (_, Some(host)) => Some(host.clone()),
40 _ => None,
41 };
42
43 Self {
44 protocol_version: PROTOCOL_VERSION,
45 username: value.username,
46 hostname: value.hostname,
47 host,
48 os: value.os,
49 distro: value.distro,
50 model: value.model,
51 kernel: value.kernel,
52 os_age: value.os_age,
53 uptime: value.uptime,
54 packages: value.packages,
55 shell: value.shell,
56 wm: value.wm,
57 de: value.de,
58 cpu: value.cpu,
59 gpu: value.gpu,
60 memory: value.memory,
61 disk: value.disk,
62 resolution: value.resolution,
63 theme: value.theme,
64 battery: value.battery,
65 song: value.song,
66 colors: value.colors,
67 }
68 }
69}
70
71impl From<&SystemInfo> for Data {
72 fn from(value: &SystemInfo) -> Self {
73 Data {
74 username: value.username.clone(),
75 hostname: value.hostname.clone(),
76 os: value.os.clone(),
77 distro: value.distro.clone(),
78 model: value.model.clone(),
79 kernel: value.kernel.clone(),
80 os_age: value.os_age.clone(),
81 uptime: value.uptime.clone(),
82 packages: value.packages.clone(),
83 shell: value.shell.clone(),
84 wm: value.wm.clone(),
85 de: value.de.clone(),
86 cpu: value.cpu.clone(),
87 gpu: value.gpu.clone(),
88 memory: value.memory.clone(),
89 disk: value.disk.clone(),
90 resolution: value.resolution.clone(),
91 theme: value.theme.clone(),
92 battery: value.battery.clone(),
93 song: value.song.clone(),
94 colors: value.colors.clone(),
95 }
96 }
97}