1use nom;
16
17#[derive(Eq, PartialEq, Copy, Clone, Debug)]
18pub enum Mode {
19 ApplicationCursor,
20 Ansi,
21 SmallFont,
22 SmoothScroll,
23 ReverseVideo,
24 Origin,
25 AutoWrap,
26 AutoRepeat,
27 FormFeed,
28 PrintComplete,
29 CursorVisible,
30 CursorRTL,
31 HebrewKeyboard,
32 HebrewEncoding,
33 Ascii,
34 NorthAmericanKeyboard,
35 ProPrinterEmulation,
36 VerticalCoupling,
37 PageCoupling,
38 ApplicationKeypad,
39 Backspace,
40 DataProcessing,
41 SetMargins,
42 LimitedTransmission,
43 KeyPosition,
44 Saver,
45 NoClear,
46 CopyRTL,
47 AutoResize,
48 Modem,
49 AutoAnswerback,
50 ConcealAnswerback,
51 IgnoreNull,
52 HalfDuplex,
53 SecondaryKeyboard,
54 Overscan,
55 NumLock,
56 CapsLock,
57 HostIndicatorLed,
58}
59
60impl Mode {
61 #[inline]
62 pub fn parse<'a>(value: u32) -> Result<Self, nom::ErrorKind> {
63 match value {
64 1 => Ok(Mode::ApplicationCursor),
65 2 => Ok(Mode::Ansi),
66 3 => Ok(Mode::SmallFont),
67 4 => Ok(Mode::SmoothScroll),
68 5 => Ok(Mode::ReverseVideo),
69 6 => Ok(Mode::Origin),
70 7 => Ok(Mode::AutoWrap),
71 8 => Ok(Mode::AutoRepeat),
72 18 => Ok(Mode::FormFeed),
73 19 => Ok(Mode::PrintComplete),
74 25 => Ok(Mode::CursorVisible),
75 34 => Ok(Mode::CursorRTL),
76 35 => Ok(Mode::HebrewKeyboard),
77 36 => Ok(Mode::HebrewEncoding),
78 42 => Ok(Mode::Ascii),
79 57 => Ok(Mode::NorthAmericanKeyboard),
80 58 => Ok(Mode::ProPrinterEmulation),
81 61 => Ok(Mode::VerticalCoupling),
82 64 => Ok(Mode::PageCoupling),
83 66 => Ok(Mode::ApplicationKeypad),
84 67 => Ok(Mode::Backspace),
85 68 => Ok(Mode::DataProcessing),
86 69 => Ok(Mode::SetMargins),
87 73 => Ok(Mode::LimitedTransmission),
88 81 => Ok(Mode::KeyPosition),
89 97 => Ok(Mode::Saver),
90 95 => Ok(Mode::NoClear),
91 96 => Ok(Mode::CopyRTL),
92 98 => Ok(Mode::AutoResize),
93 99 => Ok(Mode::Modem),
94 100 => Ok(Mode::AutoAnswerback),
95 101 => Ok(Mode::ConcealAnswerback),
96 102 => Ok(Mode::IgnoreNull),
97 103 => Ok(Mode::HalfDuplex),
98 104 => Ok(Mode::SecondaryKeyboard),
99 106 => Ok(Mode::Overscan),
100 108 => Ok(Mode::NumLock),
101 109 => Ok(Mode::CapsLock),
102 110 => Ok(Mode::HostIndicatorLed),
103
104 _ => Err(nom::ErrorKind::Custom(9004)),
105 }
106 }
107}
108
109impl Into<u32> for Mode {
110 #[inline]
111 fn into(self) -> u32 {
112 match self {
113 Mode::ApplicationCursor => 1,
114 Mode::Ansi => 2,
115 Mode::SmallFont => 3,
116 Mode::SmoothScroll => 4,
117 Mode::ReverseVideo => 5,
118 Mode::Origin => 6,
119 Mode::AutoWrap => 7,
120 Mode::AutoRepeat => 8,
121 Mode::FormFeed => 18,
122 Mode::PrintComplete => 19,
123 Mode::CursorVisible => 25,
124 Mode::CursorRTL => 34,
125 Mode::HebrewKeyboard => 35,
126 Mode::HebrewEncoding => 36,
127 Mode::Ascii => 42,
128 Mode::NorthAmericanKeyboard => 57,
129 Mode::ProPrinterEmulation => 58,
130 Mode::VerticalCoupling => 61,
131 Mode::PageCoupling => 64,
132 Mode::ApplicationKeypad => 66,
133 Mode::Backspace => 67,
134 Mode::DataProcessing => 68,
135 Mode::SetMargins => 69,
136 Mode::LimitedTransmission => 73,
137 Mode::KeyPosition => 81,
138 Mode::NoClear => 95,
139 Mode::CopyRTL => 96,
140 Mode::Saver => 97,
141 Mode::AutoResize => 98,
142 Mode::Modem => 99,
143 Mode::AutoAnswerback => 100,
144 Mode::ConcealAnswerback => 101,
145 Mode::IgnoreNull => 102,
146 Mode::HalfDuplex => 103,
147 Mode::SecondaryKeyboard => 104,
148 Mode::Overscan => 106,
149 Mode::NumLock => 108,
150 Mode::CapsLock => 109,
151 Mode::HostIndicatorLed => 110,
152 }
153 }
154}