1use crate::display::error::Error;
2
3#[non_exhaustive]
6pub struct CharacterSet;
7
8impl CharacterSet {
9 pub const LATIN1: u8 = 0;
10 pub const LATIN2: u8 = 1;
11 pub const LATIN3: u8 = 2;
12 pub const LATIN4: u8 = 3;
13 pub const KANA: u8 = 4;
14 pub const ARABIC: u8 = 5;
15 pub const CYRILLIC: u8 = 6;
16 pub const GREEK: u8 = 7;
17 pub const TECHNICAL: u8 = 8;
18 pub const SPECIAL: u8 = 9;
19 pub const PUBLISHING: u8 = 10;
20 pub const APL: u8 = 11;
21 pub const HEBREW: u8 = 12;
22 pub const THAI: u8 = 13;
23 pub const KOREAN: u8 = 14;
24 pub const LATIN5: u8 = 15;
25 pub const LATIN6: u8 = 16;
26 pub const LATIN7: u8 = 17;
27 pub const LATIN8: u8 = 18;
28 pub const LATIN9: u8 = 19;
29 pub const CURRENCY: u8 = 32;
30 pub const C3270: u8 = 253;
31 pub const XKB: u8 = 254;
32 pub const KEYBOARD: u8 = 255;
33}
34
35#[derive(Debug, Clone, Copy, PartialEq)]
36pub struct Keysym {
37 value: u32,
38}
39
40impl Keysym {
41 pub fn new(value: u32) -> Keysym {
42 Keysym { value }
43 }
44
45 pub fn character(&self) -> Result<char, Error> {
47 match ((self.value & 0xff00) >> 8) as u8 {
48 CharacterSet::LATIN1 => {
49 char::from_u32((self.value & 0xff) + 0x20 - 32).ok_or(Error::InvalidKeysym)
50 }
51 _ => Err(Error::InvalidKeysym),
52 }
53 }
54}