holodeck_simctl_core/models/
appearance.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2pub enum Appearance {
3 Light,
4 Dark,
5}
6
7impl Appearance {
8 pub fn raw_value(self) -> &'static str {
9 match self {
10 Appearance::Light => "light",
11 Appearance::Dark => "dark",
12 }
13 }
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq)]
17pub enum BatteryState {
18 Charging,
19 Charged,
20 Discharging,
21}
22
23impl BatteryState {
24 pub fn raw_value(self) -> &'static str {
25 match self {
26 BatteryState::Charging => "charging",
27 BatteryState::Charged => "charged",
28 BatteryState::Discharging => "discharging",
29 }
30 }
31}
32
33#[derive(Debug, Clone, Default, PartialEq, Eq)]
34pub struct StatusBarOverrides {
35 pub time: Option<String>,
36 pub battery_state: Option<BatteryState>,
37 pub battery_level: Option<i64>,
38 pub wifi_bars: Option<i64>,
39 pub cellular_bars: Option<i64>,
40 pub operator_name: Option<String>,
41}
42
43impl StatusBarOverrides {
44 pub fn is_empty(&self) -> bool {
45 self.time.is_none()
46 && self.battery_state.is_none()
47 && self.battery_level.is_none()
48 && self.wifi_bars.is_none()
49 && self.cellular_bars.is_none()
50 && self.operator_name.is_none()
51 }
52
53 pub fn simctl_arguments(&self) -> Vec<String> {
54 let mut args = Vec::new();
55 if let Some(time) = &self.time {
56 args.push("--time".to_string());
57 args.push(time.clone());
58 }
59 if let Some(state) = self.battery_state {
60 args.push("--batteryState".to_string());
61 args.push(state.raw_value().to_string());
62 }
63 if let Some(level) = self.battery_level {
64 args.push("--batteryLevel".to_string());
65 args.push(level.to_string());
66 }
67 if let Some(bars) = self.wifi_bars {
68 args.push("--wifiBars".to_string());
69 args.push(bars.to_string());
70 }
71 if let Some(bars) = self.cellular_bars {
72 args.push("--cellularBars".to_string());
73 args.push(bars.to_string());
74 }
75 if let Some(name) = &self.operator_name {
76 args.push("--operatorName".to_string());
77 args.push(name.clone());
78 }
79 args
80 }
81}
82
83#[cfg(test)]
84mod tests {
85 use super::*;
86
87 #[test]
88 fn empty_overrides_report_empty() {
89 assert!(StatusBarOverrides::default().is_empty());
90 }
91
92 #[test]
93 fn builds_simctl_arguments_in_order() {
94 let overrides = StatusBarOverrides { time: Some("9:41".to_string()), battery_level: Some(100), ..Default::default() };
95 assert_eq!(overrides.simctl_arguments(), vec!["--time", "9:41", "--batteryLevel", "100"]);
96 }
97}