@@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
22
33use crate :: Direction ;
44
5- use super :: { EventSource , GamepadEvent , KeyEvent , MouseEvent } ;
5+ use super :: { EventSource , GamepadEvent , KeyEvent , MouseEvent , UnknownEvent } ;
66
77/// A user input event, as generated by the new frontend (LUNA).
88#[ derive( Debug , Serialize , Deserialize , PartialEq , Clone ) ]
@@ -11,6 +11,8 @@ pub enum InputEvent {
1111 Key ( KeyEvent ) ,
1212 Mouse ( MouseEvent ) ,
1313 Gamepad ( GamepadEvent ) ,
14+ #[ serde( untagged) ]
15+ Unknown ( UnknownEvent ) ,
1416}
1517
1618impl InputEvent {
@@ -20,6 +22,7 @@ impl InputEvent {
2022 InputEvent :: Key ( KeyEvent { source, .. } ) => source,
2123 InputEvent :: Mouse ( MouseEvent { source, .. } ) => source,
2224 InputEvent :: Gamepad ( GamepadEvent { source, .. } ) => source,
25+ InputEvent :: Unknown ( UnknownEvent { source, .. } ) => source,
2326 }
2427 }
2528
@@ -53,7 +56,7 @@ impl InputEvent {
5356mod tests {
5457 use serde_json:: json;
5558
56- use crate :: { Delta , EventSource , GamepadAxis2DEvent , GamepadAxisEvent , GamepadButtonEvent , GamepadControlEvent , GamepadEvent , InputEvent , KeyEvent , KeyModifiers , MouseButton , MouseEvent , Pos , Vec2 } ;
59+ use crate :: { Delta , EventSource , GamepadAxis2DEvent , GamepadAxisEvent , GamepadButtonEvent , GamepadControlEvent , GamepadEvent , InputEvent , KeyEvent , KeyModifiers , MouseButton , MouseEvent , Pos , UnknownEvent , Vec2 } ;
5760
5861 #[ test]
5962 fn key_event ( ) {
@@ -174,4 +177,21 @@ mod tests {
174177 } )
175178 ) ;
176179 }
180+
181+ #[ test]
182+ fn unknown_event ( ) {
183+ assert_eq ! (
184+ serde_json:: from_value:: <InputEvent >( json!( {
185+ "type" : "someEventWeDoNotKnowAbout" ,
186+ "source" : 1 ,
187+ "possibly" : "abc" ,
188+ "more" : "def" ,
189+ "fields" : "ghi"
190+ } ) ) . unwrap( ) ,
191+ InputEvent :: Unknown ( UnknownEvent {
192+ source: EventSource :: Int ( 1 ) ,
193+ event_type: "someEventWeDoNotKnowAbout" . into( ) ,
194+ } )
195+ )
196+ }
177197}
0 commit comments