1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use crossterm::input::{AsyncReader, InputEvent, KeyEvent, MouseEvent};

pub struct InputEvents{
    pub key_events: Vec<KeyEvent>,
    pub mouse_events: Vec<MouseEvent>,
}

impl InputEvents {
    pub fn new(reader: &mut AsyncReader) -> InputEvents {
        let mut input_events = InputEvents{ key_events: vec![], mouse_events: vec![] };
        while let Some(event) = reader.next() {
            match event {
                InputEvent::Keyboard(event) => {
                    input_events.key_events.push(event);
                }
                InputEvent::Mouse(event) => {
                    input_events.mouse_events.push(event);
                }
                _ => {}
            }
        }
        input_events
    }
}