1pub struct App {
2 pub status: Status,
3}
4
5pub enum Status {
7 Editing {
13 edit: String,
14 previous: Option<usize>,
15 },
16 Idle,
18 Exiting,
22}
23
24impl App {
25 pub fn new() -> Self {
27 Self {
28 status: Status::Idle,
29 }
30 }
31 pub fn switch_status(&mut self, new_status: Status) {
33 self.status = new_status;
34 }
35
36 pub fn add_char(&mut self, ch: char) {
38 if let Status::Editing { edit, previous: _ } = &mut self.status {
39 edit.push(ch);
40 }
41 }
42
43 pub fn pop_char(&mut self) {
45 if let Status::Editing { edit, previous: _ } = &mut self.status {
46 edit.pop();
47 }
48 }
49
50 pub fn get_editing_task(&self) -> String {
52 if let Status::Editing { edit, previous: _ } = &self.status {
53 edit.to_string()
54 } else {
55 String::new()
56 }
57 }
58
59 pub fn get_prev_task(&self) -> Option<usize> {
61 if let Status::Editing { edit: _, previous } = &self.status {
62 *previous
63 } else {
64 None
65 }
66 }
67}
68
69impl Default for App {
70 fn default() -> Self {
71 Self::new()
72 }
73}