lighthouse_protocol/input/
input_event.rs1use serde::{Deserialize, Serialize};
2
3use super::{GamepadEvent, KeyEvent, MouseEvent};
4
5#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
7#[serde(tag = "type", rename_all = "camelCase")]
8pub enum InputEvent {
9 Key(KeyEvent),
10 Mouse(MouseEvent),
11 Gamepad(GamepadEvent),
12}
13
14#[cfg(test)]
15mod tests {
16 use serde_json::json;
17
18 use crate::{EventSource, GamepadAxisEvent, GamepadButtonEvent, GamepadControlEvent, GamepadEvent, InputEvent, KeyEvent, KeyModifiers, MouseButton, MouseEvent, Pos};
19
20 #[test]
21 fn key_event() {
22 assert_eq!(
23 serde_json::from_value::<InputEvent>(json!({
24 "type": "key",
25 "source": 0,
26 "down": true,
27 "repeat": false,
28 "code": "ArrowUp",
29 "modifiers": {
30 "alt": false,
31 "ctrl": false,
32 "meta": false,
33 "shift": false,
34 },
35 })).unwrap(),
36 InputEvent::Key(KeyEvent {
37 source: EventSource::Int(0),
38 down: true,
39 repeat: false,
40 code: "ArrowUp".into(),
41 modifiers: KeyModifiers::default(),
42 })
43 );
44 }
45
46 #[test]
47 fn mouse_event() {
48 assert_eq!(
49 serde_json::from_value::<InputEvent>(json!({
50 "type": "mouse",
51 "source": 1,
52 "button": "left",
53 "pos": {
54 "x": 2,
55 "y": 4,
56 },
57 })).unwrap(),
58 InputEvent::Mouse(MouseEvent {
59 source: EventSource::Int(1),
60 button: MouseButton::Left,
61 pos: Pos::new(2.0, 4.0),
62 })
63 );
64 }
65
66 #[test]
67 fn gamepad_button_event() {
68 assert_eq!(
69 serde_json::from_value::<InputEvent>(json!({
70 "type": "gamepad",
71 "source": 1,
72 "control": "button",
73 "index": 42,
74 "down": true,
75 "value": 0.25,
76 })).unwrap(),
77 InputEvent::Gamepad(GamepadEvent {
78 source: EventSource::Int(1),
79 control: GamepadControlEvent::Button(GamepadButtonEvent {
80 index: 42,
81 down: true,
82 value: 0.25,
83 }),
84 })
85 );
86 }
87
88 #[test]
89 fn gamepad_axis_event() {
90 assert_eq!(
91 serde_json::from_value::<InputEvent>(json!({
92 "type": "gamepad",
93 "source": 1,
94 "control": "axis",
95 "index": 42,
96 "value": 0.25,
97 })).unwrap(),
98 InputEvent::Gamepad(GamepadEvent {
99 source: EventSource::Int(1),
100 control: GamepadControlEvent::Axis(GamepadAxisEvent {
101 index: 42,
102 value: 0.25,
103 }),
104 })
105 );
106 }
107}