use cosh_tools::computer::surface::surface_label;
use cosh_tools::computer::types::{ComputerAct, ComputerSnapshot, SurfaceKind};
fn main() {
let kinds = [
(SurfaceKind::MenuBar, "menu_bar"),
(SurfaceKind::StatusItems, "status_items"),
(SurfaceKind::Taskbar, "taskbar"),
(SurfaceKind::Panel, "panel"),
(SurfaceKind::Dock, "dock"),
(SurfaceKind::Desktop, "desktop"),
(SurfaceKind::Flyout, "flyout"),
(SurfaceKind::Unknown, "unknown"),
];
for (kind, wire) in kinds {
let parsed: SurfaceKind = serde_json::from_str(&format!("\"{wire}\""))
.expect("the snake_case wire spelling parses");
assert_eq!(parsed, kind);
println!("{wire:14} → {}", surface_label(kind));
}
let taskbar_snapshot = ComputerSnapshot {
surface: Some(SurfaceKind::Taskbar),
..Default::default()
};
println!("taskbar snapshot: {taskbar_snapshot:?}");
let press_taskbar_icon = ComputerAct {
surface: Some(SurfaceKind::Taskbar),
selector: Some("button[name='Files']".into()),
..Default::default()
};
println!("taskbar press: {press_taskbar_icon:?}");
let open_flyout = ComputerAct {
surface: Some(SurfaceKind::Flyout),
selector: Some("switch[name='Bluetooth']".into()),
..Default::default()
};
println!("flyout switch: {open_flyout:?}");
let snapshot_wire = r#"{"surface": "taskbar"}"#;
let _: ComputerSnapshot = serde_json::from_str(snapshot_wire).expect("valid wire shape");
println!("taskbar snapshot wire: {snapshot_wire}");
for (label, wire) in [
(
"act on a taskbar icon",
r#"{"surface": "taskbar", "selector": "button[name='Files']"}"#,
),
(
"flip a flyout switch",
r#"{"surface": "flyout", "selector": "switch[name='Bluetooth']"}"#,
),
] {
let _: ComputerAct = serde_json::from_str(wire).expect("valid wire shape");
println!("{label} wire: {wire}");
}
}