sysd_manager_base/
enums.rs1use gettextrs::pgettext;
2use glib::value::ToValue;
3use strum::EnumIter;
4use tracing::warn;
5
6#[derive(
7 Debug, Copy, Clone, PartialEq, Eq, glib::Enum, Default, EnumIter, Hash, Ord, PartialOrd,
8)]
9#[enum_type(name = "UnitDBusLevel")]
10pub enum UnitDBusLevel {
11 #[default]
12 #[enum_value(name = "system", nick = "System")]
13 System = 0,
14 #[enum_value(name = "user", nick = "User Session")]
15 UserSession = 1,
16 #[enum_value(name = "both", nick = "System & User")]
17 Both = 2,
18}
19
20impl UnitDBusLevel {
21 pub fn short(&self) -> &str {
22 match self {
23 UnitDBusLevel::System => "s",
24 UnitDBusLevel::UserSession => "u",
25 UnitDBusLevel::Both => "b",
26 }
27 }
28
29 pub fn normalize(&self) -> Self {
30 match self {
31 UnitDBusLevel::Both => UnitDBusLevel::System,
32 bus => *bus,
33 }
34 }
35
36 pub fn user_session(&self) -> bool {
37 matches!(self, UnitDBusLevel::UserSession)
38 }
39
40 pub fn as_str(&self) -> &'static str {
41 let level_value: &glib::EnumValue = self.to_value().get().expect("it's an enum");
42 level_value.name()
43 }
44
45 pub fn label(&self) -> &'static str {
47 self.as_str()
48 }
49
50 pub fn nice_label(&self) -> String {
51 match self {
52 UnitDBusLevel::UserSession => pgettext("dbus", "User Session"),
54 _ => pgettext("dbus", "System"),
56 }
57 }
58
59 pub fn from_short(suffix: &str) -> Self {
60 match suffix {
61 "s" => UnitDBusLevel::System,
62 "u" => UnitDBusLevel::UserSession,
63 "b" => UnitDBusLevel::Both,
64 _ => UnitDBusLevel::System,
65 }
66 }
67
68 pub fn tooltip_info(&self) -> Option<&str> {
69 None
70 }
71
72 pub fn value(&self) -> i32 {
73 let level_value: &glib::EnumValue = self.to_value().get().expect("it's an enum");
74 level_value.value()
75 }
76
77 pub fn index(&self) -> u8 {
78 match self {
79 UnitDBusLevel::System => 0,
80 UnitDBusLevel::UserSession => 1,
81 UnitDBusLevel::Both => 2,
82 }
83 }
84}
85
86impl From<u8> for UnitDBusLevel {
87 fn from(level: u8) -> Self {
88 match level {
89 0 => UnitDBusLevel::System,
90 1 => UnitDBusLevel::UserSession,
91 2 => UnitDBusLevel::Both,
92 _ => UnitDBusLevel::UserSession,
93 }
94 }
95}
96
97impl From<u32> for UnitDBusLevel {
98 fn from(level: u32) -> Self {
99 (level as u8).into()
100 }
101}
102
103impl From<&str> for UnitDBusLevel {
104 fn from(level: &str) -> Self {
105 match level {
106 "user" => UnitDBusLevel::UserSession,
107 "system" => UnitDBusLevel::System,
108 _ => {
109 warn!("Unit dbus Level not found {level:?}");
110 UnitDBusLevel::default()
111 }
112 }
113 }
114}