1#[derive(Debug, PartialEq, Copy, Clone)]
2pub enum Case {
3 Upper,
4 Lower,
5 Number,
6}
7
8#[derive(Debug)]
9pub struct CaseState {
10 case: Case,
11 prev_case: Case,
12}
13
14impl CaseState {
15 pub fn new(case: Case) -> Self {
16 Self {
17 case,
18 prev_case: case,
19 }
20 }
21
22 pub fn case(&self) -> Case {
23 self.case
24 }
25
26 pub fn enable_numeric_case(&mut self) {
27 self.prev_case = self.case;
28 self.case = Case::Number;
29 }
30
31 pub fn cycle_case(&mut self) {
32 self.case = match self.case {
33 Case::Number => match self.prev_case {
34 Case::Upper => Case::Lower,
35 Case::Lower => Case::Upper,
36 Case::Number => Case::Upper,
37 },
38 Case::Upper => Case::Lower,
39 Case::Lower => Case::Upper,
40 }
41 }
42}