Skip to main content

devela/sys/os/browser/web/event/key/
media.rs

1// devela::sys::os::browser::web::event::key::media
2//
3//! Implements methods for [`KeyMedia`].
4//
5
6use crate::KeyMedia;
7
8#[rustfmt::skip]
9impl KeyMedia {
10    /// Atempts to construct a `KeyMedia` from a JavaScript `KeyboardEvent` physical [code].
11    ///
12    /// [code]: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code
13    pub const fn from_web_code(code: &str) -> Option<Self> {
14        use KeyMedia as K;
15        match code.as_bytes() {
16            b"MediaPlay" => Some(K::Play),
17            b"MediaPause" => Some(K::Pause),
18            b"MediaPlayPause" => Some(K::PlayPause),
19            b"MediaReverse" => Some(K::Reverse),
20            b"MediaStop" => Some(K::Stop),
21            b"MediaFastForward" => Some(K::FastForward),
22            b"MediaRewind" => Some(K::Rewind),
23            b"MediaTrackNext" => Some(K::Next),
24            b"MediaTrackPrevious" => Some(K::Previous),
25            b"MediaRecord" => Some(K::Record),
26            b"AudioVolumeDown" => Some(K::LowerVolume),
27            b"AudioVolumeUp" => Some(K::RaiseVolume),
28            b"AudioVolumeMute" => Some(K::MuteVolume),
29            //
30            b"Eject" => Some(K::Eject),
31            b"MediaSelect" => Some(K::MediaSelect),
32            b"LaunchMedia" => Some(K::LaunchMedia),
33            b"BassBoost" => Some(K::BassBoost),
34            b"BassUp" => Some(K::BassUp),
35            b"BassDown" => Some(K::BassDown),
36            b"TrebleUp" => Some(K::TrebleUp),
37            b"TrebleDown" => Some(K::TrebleDown),
38            b"MicrophoneMute" => Some(K::MicrophoneMute),
39            b"MicrophoneVolumeUp" => Some(K::MicrophoneVolumeUp),
40            b"MicrophoneVolumeDown" => Some(K::MicrophoneVolumeDown),
41            b"BrightnessUp" => Some(K::BrightnessUp),
42            b"BrightnessDown" => Some(K::BrightnessDown),
43            b"Sleep" => Some(K::Sleep),
44            b"Wake" => Some(K::Wake),
45            b"Power" => Some(K::Power),
46            _ => None,
47        }
48    }
49    /// Returns a JavaScript `KeyboardEvent` physical [code].
50    ///
51    /// [code]: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code
52    pub const fn to_web_code(self) -> &'static str {
53        use KeyMedia as K;
54        match self {
55            K::Play => "MediaPlay",
56            K::Pause => "MediaPause",
57            K::PlayPause => "MediaPlayPause",
58            K::Reverse => "MediaReverse",
59            K::Stop => "MediaStop",
60            K::FastForward => "MediaFastForward",
61            K::Rewind => "MediaRewind",
62            K::Next => "MediaTrackNext",
63            K::Previous => "MediaTrackPrevious",
64            K::Record => "MediaRecord",
65            K::LowerVolume => "AudioVolumeDown",
66            K::RaiseVolume => "AudioVolumeUp",
67            K::MuteVolume => "AudioVolumeMute",
68            //
69            K::Eject => "Eject",
70            K::MediaSelect => "MediaSelect",
71            K::LaunchMedia => "LaunchMedia",
72            K::BassBoost => "BassBoost",
73            K::BassUp => "BassUp",
74            K::BassDown => "BassDown",
75            K::TrebleUp => "TrebleUp",
76            K::TrebleDown => "TrebleDown",
77            K::MicrophoneMute => "MicrophoneMute",
78            K::MicrophoneVolumeUp => "MicrophoneVolumeUp",
79            K::MicrophoneVolumeDown => "MicrophoneVolumeDown",
80            K::BrightnessUp => "BrightnessUp",
81            K::BrightnessDown => "BrightnessDown",
82            K::Sleep => "Sleep",
83            K::Wake => "Wake",
84            K::Power => "Power",
85        }
86    }
87
88    /// Atempts to construct a `KeyMedia` from a JavaScript `KeyboardEvent` semantic [key].
89    ///
90    /// [key]: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key
91    pub const fn from_web_key(key: &str) -> Option<Self> {
92        use KeyMedia as K;
93        match key.as_bytes() {
94            b"Play" => Some(K::Play),
95            b"Pause" => Some(K::Pause),
96            b"MediaPlayPause" => Some(K::PlayPause),
97            b"MediaReverse" => Some(K::Reverse),
98            b"Stop" => Some(K::Stop),
99            b"FastForward" => Some(K::FastForward),
100            b"Rewind" => Some(K::Rewind),
101            b"NextTrack" => Some(K::Next),
102            b"PreviousTrack" => Some(K::Previous),
103            b"Record" => Some(K::Record),
104            b"VolumeDown" => Some(K::LowerVolume),
105            b"VolumeUp" => Some(K::RaiseVolume),
106            b"VolumeMute" => Some(K::MuteVolume),
107            //
108            b"Eject" => Some(K::Eject),
109            b"MediaSelect" => Some(K::MediaSelect),
110            b"LaunchMedia" => Some(K::LaunchMedia),
111            b"Bass Boost" => Some(K::BassBoost),
112            b"Bass Up" => Some(K::BassUp),
113            b"Bass Down" => Some(K::BassDown),
114            b"Treble Up" => Some(K::TrebleUp),
115            b"Treble Down" => Some(K::TrebleDown),
116            b"MicMute" => Some(K::MicrophoneMute),
117            b"MicVolumeUp" => Some(K::MicrophoneVolumeUp),
118            b"MicVolumeDown" => Some(K::MicrophoneVolumeDown),
119            b"BrightnessUp" => Some(K::BrightnessUp),
120            b"BrightnessDown" => Some(K::BrightnessDown),
121            b"Sleep" => Some(K::Sleep),
122            b"Wake" => Some(K::Wake),
123            b"Power" => Some(K::Power),
124            _ => None,
125        }
126    }
127    /// Returns a JavaScript `KeyboardEvent` semantic [key].
128    ///
129    /// [key]: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key
130    pub const fn to_web_key(self) -> &'static str {
131        use KeyMedia as K;
132        match self {
133            K::Play => "Play",
134            K::Pause => "Pause",
135            K::PlayPause => "MediaPlayPause",
136            K::Reverse => "MediaReverse",
137            K::Stop => "Stop",
138            K::FastForward => "FastForward",
139            K::Rewind => "Rewind",
140            K::Next => "NextTrack",
141            K::Previous => "PreviousTrack",
142            K::Record => "Record",
143            K::LowerVolume => "VolumeDown",
144            K::RaiseVolume => "VolumeUp",
145            K::MuteVolume => "VolumeMute",
146            //
147            K::Eject => "Eject",
148            K::MediaSelect => "MediaSelect",
149            K::LaunchMedia => "LaunchMedia",
150            K::BassBoost => "Bass Boost",
151            K::BassUp => "Bass Up",
152            K::BassDown => "Bass Down",
153            K::TrebleUp => "Treble Up",
154            K::TrebleDown => "Treble Down",
155            K::MicrophoneMute => "MicMute",
156            K::MicrophoneVolumeUp => "MicVolumeUp",
157            K::MicrophoneVolumeDown => "MicVolumeDown",
158            K::BrightnessUp => "BrightnessUp",
159            K::BrightnessDown => "BrightnessDown",
160            K::Sleep => "Sleep",
161            K::Wake => "Wake",
162            K::Power => "Power",
163        }
164    }
165}