Skip to main content

ferroui_base/input/
key_symbol_helper.rs

1/// Helpers for key symbols reported by platform backends.
2pub struct KeySymbolHelper;
3
4impl KeySymbolHelper {
5    /// Whether an ASCII character is acceptable as a key symbol: control
6    /// characters other than backspace, tab, return and escape are not.
7    pub fn is_allowed_ascii_key_symbol(c: char) -> bool {
8        let code = c as u32;
9
10        if code < 0x20 {
11            // backspace, tab, return, escape
12            return matches!(code, 0x08 | 0x09 | 0x0D | 0x1B);
13        }
14
15        // delete
16        code != 0x7F
17    }
18}
19
20#[cfg(test)]
21mod tests {
22    use super::*;
23
24    #[test]
25    fn filters_control_characters() {
26        assert!(KeySymbolHelper::is_allowed_ascii_key_symbol('a'));
27        assert!(KeySymbolHelper::is_allowed_ascii_key_symbol('\t'));
28        assert!(KeySymbolHelper::is_allowed_ascii_key_symbol('\u{1B}'));
29        assert!(!KeySymbolHelper::is_allowed_ascii_key_symbol('\u{1}'));
30        assert!(!KeySymbolHelper::is_allowed_ascii_key_symbol('\u{7F}'));
31    }
32}