shared/multitap/
case.rs

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}