stdweb/webapi/events/
gamepad.rs1use webcore::value::Reference;
2use webcore::try_from::TryInto;
3
4use webapi::event::{IEvent, Event};
5use webapi::gamepad::Gamepad;
6
7pub trait IGamepadEvent: IEvent {
12
13 #[inline]
15 fn gamepad( &self ) -> Gamepad {
16 js!(
17 return @{self.as_ref()}.gamepad;
18 ).try_into().unwrap()
19 }
20}
21
22#[derive(Clone, Debug, Eq, PartialEq, ReferenceType)]
28#[reference(instance_of = "GamepadEvent")]
29#[reference(subclass_of(Event))]
30pub struct GamepadEvent( Reference );
31
32impl IEvent for GamepadEvent {}
33impl IGamepadEvent for GamepadEvent {}
34
35#[derive(Clone, Debug, Eq, PartialEq, ReferenceType)]
40#[reference(instance_of = "GamepadEvent")]
41#[reference(event = "gamepadconnected")]
42#[reference(subclass_of(Event, GamepadEvent))]
43pub struct GamepadConnectedEvent( Reference );
44
45impl IEvent for GamepadConnectedEvent {}
46impl IGamepadEvent for GamepadConnectedEvent {}
47
48#[derive(Clone, Debug, Eq, PartialEq, ReferenceType)]
53#[reference(instance_of = "GamepadEvent")]
54#[reference(event = "gamepaddisconnected")]
55#[reference(subclass_of(Event, GamepadEvent))]
56pub struct GamepadDisconnectedEvent( Reference );
57
58impl IEvent for GamepadDisconnectedEvent {}
59impl IGamepadEvent for GamepadDisconnectedEvent {}
60
61#[cfg(all(test, feature = "web_test"))]
62mod tests {
63 use super::*;
64
65 #[test]
66 fn test_gamepad_connected_event() {
67
68 let event: GamepadConnectedEvent = js!(
69 return new GamepadEvent("gamepadconnected");
70 ).try_into().unwrap();
71
72 assert_eq!(event.event_type(), "gamepadconnected");
73 }
74
75 #[test]
76 fn test_gamepad_disconnected_event() {
77
78 let event: GamepadDisconnectedEvent = js!(
79 return new GamepadEvent("gamepaddisconnected");
80 ).try_into().unwrap();
81
82 assert_eq!(event.event_type(), "gamepaddisconnected");
83 }
84}