use crate::protocol::cdp::Input::{DispatchKeyEvent, DispatchKeyEventTypeOption};
use crate::protocol::cdp::types::JsUInt;
use anyhow::Result;
use thiserror::Error;
pub struct KeyDefinition {
pub key: &'static str,
pub key_code: JsUInt,
pub code: &'static str,
pub text: Option<&'static str>,
}
impl From<&KeyDefinition> for DispatchKeyEvent {
fn from(val: &KeyDefinition) -> Self {
let text = val
.text
.or({
if val.key.len() == 1 {
Some(val.key)
} else {
None
}
})
.map(std::string::ToString::to_string);
let key_down_event_type = if text.is_some() {
DispatchKeyEventTypeOption::KeyDown
} else {
DispatchKeyEventTypeOption::RawKeyDown
};
let key = Some(val.key.to_string());
let code = Some(val.code.to_string());
DispatchKeyEvent {
Type: key_down_event_type,
key,
text,
code,
windows_virtual_key_code: Some(val.key_code),
native_virtual_key_code: Some(val.key_code),
modifiers: None,
timestamp: None,
unmodified_text: None,
key_identifier: None,
auto_repeat: None,
is_keypad: None,
is_system_key: None,
location: None,
commands: None,
}
}
}
pub const USKEYBOARD_LAYOUT: [KeyDefinition; 244] = [
KeyDefinition {
key: "0",
key_code: 48,
code: "Digit0",
text: None,
},
KeyDefinition {
key: "1",
key_code: 49,
code: "Digit1",
text: None,
},
KeyDefinition {
key: "2",
key_code: 50,
code: "Digit2",
text: None,
},
KeyDefinition {
key: "3",
key_code: 51,
code: "Digit3",
text: None,
},
KeyDefinition {
key: "4",
key_code: 52,
code: "Digit4",
text: None,
},
KeyDefinition {
key: "5",
key_code: 53,
code: "Digit5",
text: None,
},
KeyDefinition {
key: "6",
key_code: 54,
code: "Digit6",
text: None,
},
KeyDefinition {
key: "7",
key_code: 55,
code: "Digit7",
text: None,
},
KeyDefinition {
key: "8",
key_code: 56,
code: "Digit8",
text: None,
},
KeyDefinition {
key: "9",
key_code: 57,
code: "Digit9",
text: None,
},
KeyDefinition {
key: "Power",
key_code: 0,
code: "Power",
text: None,
},
KeyDefinition {
key: "Eject",
key_code: 0,
code: "Eject",
text: None,
},
KeyDefinition {
key: "Cancel",
key_code: 3,
code: "Abort",
text: None,
},
KeyDefinition {
key: "Help",
key_code: 6,
code: "Help",
text: None,
},
KeyDefinition {
key: "Backspace",
key_code: 8,
code: "Backspace",
text: None,
},
KeyDefinition {
key: "Tab",
key_code: 9,
code: "Tab",
text: None,
},
KeyDefinition {
key: "Clear",
key_code: 12,
code: "Numpad5",
text: None,
},
KeyDefinition {
key: "Enter",
key_code: 13,
code: "Enter",
text: Some("\r"),
},
KeyDefinition {
key: "Shift",
key_code: 16,
code: "ShiftLeft",
text: None,
},
KeyDefinition {
key: "Shift",
key_code: 16,
code: "ShiftRight",
text: None,
},
KeyDefinition {
key: "Control",
key_code: 17,
code: "ControlLeft",
text: None,
},
KeyDefinition {
key: "Control",
key_code: 17,
code: "ControlRight",
text: None,
},
KeyDefinition {
key: "Alt",
key_code: 18,
code: "AltLeft",
text: None,
},
KeyDefinition {
key: "Alt",
key_code: 18,
code: "AltRight",
text: None,
},
KeyDefinition {
key: "Pause",
key_code: 19,
code: "Pause",
text: None,
},
KeyDefinition {
key: "CapsLock",
key_code: 20,
code: "CapsLock",
text: None,
},
KeyDefinition {
key: "Escape",
key_code: 27,
code: "Escape",
text: None,
},
KeyDefinition {
key: "Convert",
key_code: 28,
code: "Convert",
text: None,
},
KeyDefinition {
key: "NonConvert",
key_code: 29,
code: "NonConvert",
text: None,
},
KeyDefinition {
key: " ",
key_code: 32,
code: "Space",
text: None,
},
KeyDefinition {
key: "PageUp",
key_code: 33,
code: "Numpad9",
text: None,
},
KeyDefinition {
key: "PageUp",
key_code: 33,
code: "PageUp",
text: None,
},
KeyDefinition {
key: "PageDown",
key_code: 34,
code: "Numpad3",
text: None,
},
KeyDefinition {
key: "PageDown",
key_code: 34,
code: "PageDown",
text: None,
},
KeyDefinition {
key: "End",
key_code: 35,
code: "End",
text: None,
},
KeyDefinition {
key: "End",
key_code: 35,
code: "Numpad1",
text: None,
},
KeyDefinition {
key: "Home",
key_code: 36,
code: "Home",
text: None,
},
KeyDefinition {
key: "Home",
key_code: 36,
code: "Numpad7",
text: None,
},
KeyDefinition {
key: "ArrowLeft",
key_code: 37,
code: "ArrowLeft",
text: None,
},
KeyDefinition {
key: "ArrowLeft",
key_code: 37,
code: "Numpad4",
text: None,
},
KeyDefinition {
key: "ArrowUp",
key_code: 38,
code: "Numpad8",
text: None,
},
KeyDefinition {
key: "ArrowUp",
key_code: 38,
code: "ArrowUp",
text: None,
},
KeyDefinition {
key: "ArrowRight",
key_code: 39,
code: "ArrowRight",
text: None,
},
KeyDefinition {
key: "ArrowRight",
key_code: 39,
code: "Numpad6",
text: None,
},
KeyDefinition {
key: "ArrowDown",
key_code: 40,
code: "Numpad2",
text: None,
},
KeyDefinition {
key: "ArrowDown",
key_code: 40,
code: "ArrowDown",
text: None,
},
KeyDefinition {
key: "Select",
key_code: 41,
code: "Select",
text: None,
},
KeyDefinition {
key: "Execute",
key_code: 43,
code: "Open",
text: None,
},
KeyDefinition {
key: "PrintScreen",
key_code: 44,
code: "PrintScreen",
text: None,
},
KeyDefinition {
key: "Insert",
key_code: 45,
code: "Insert",
text: None,
},
KeyDefinition {
key: "Insert",
key_code: 45,
code: "Numpad0",
text: None,
},
KeyDefinition {
key: "Delete",
key_code: 46,
code: "Delete",
text: None,
},
KeyDefinition {
key: "