use cosh_tools::computer::keyboard::{is_keyboard_step, key_name, parse_key, parse_keys};
use cosh_tools::computer::types::ComputerControl;
use xa11y::Key;
fn main() {
const TOOL: &str = "computer_control";
for name in ["enter", "RETURN", "esc", "Escape", "arrowup", "f12"] {
println!("{name:8} → {:?}", parse_key(name, TOOL).expect("valid"));
}
assert_eq!(parse_key("a", TOOL), Ok(Key::Char('a')));
assert_eq!(parse_key("5", TOOL), Ok(Key::Char('5')));
let err = parse_key("A", TOOL).expect_err("uppercase is rejected");
println!("uppercase: {err}");
let held = parse_keys(&["ctrl".into(), "CONTROL".into(), "win".into()], TOOL)
.expect("all aliases resolve");
println!(
"ctrl + CONTROL + win → {:?}",
held.iter().map(key_name).collect::<Vec<_>>()
);
if let Err(e) = parse_keys(&["hyper".into()], TOOL) {
println!("unknown modifier: {e}");
}
assert!(is_keyboard_step(Some(" enter ".trim()), None));
assert!(is_keyboard_step(None, Some(" ")), "a literal space IS text");
assert!(!is_keyboard_step(Some(" "), None));
assert!(!is_keyboard_step(None, None));
let chord_wire = r#"{"key": "a", "held": ["ctrl"]}"#;
let select_all: ComputerControl = serde_json::from_str(chord_wire).expect("valid wire shape");
println!("chord wire: {chord_wire} → {select_all:?}");
let capital_wire = r#"{"key": "a", "held": ["shift"]}"#;
let capital: ComputerControl = serde_json::from_str(capital_wire).expect("valid wire shape");
println!("shift+`a` wire: {capital_wire} → {capital:?}");
}