1#![warn(clippy::doc_markdown)]
8#![cfg_attr(docsrs, feature(doc_cfg))]
9#![no_std]
10
11extern crate alloc;
12#[cfg(feature = "std")]
13extern crate std;
14
15pub use crate::code::{Code, UnrecognizedCodeError};
16pub use crate::composition::{CompositionEvent, CompositionState};
17pub use crate::key::{Key, UnrecognizedKeyError};
18pub use crate::key_state::KeyState;
19pub use crate::keyboard_event::KeyboardEvent;
20pub use crate::location::Location;
21pub use crate::modifiers::Modifiers;
22pub use crate::named_key::{NamedKey, UnrecognizedNamedKeyError};
23pub use crate::shortcuts::ShortcutMatcher;
24
25mod code;
26mod composition;
27mod key;
28mod key_state;
29mod keyboard_event;
30mod location;
31mod modifiers;
32mod named_key;
33mod shortcuts;
34#[cfg(feature = "webdriver")]
35pub mod webdriver;
36
37impl Default for NamedKey {
38 fn default() -> Self {
39 Self::Unidentified
40 }
41}
42
43impl Default for Code {
44 fn default() -> Code {
45 Code::Unidentified
46 }
47}
48
49fn first_char(s: &str) -> char {
54 s.chars().next().expect("empty string")
55}