devela 0.28.0

A development substrate of coherence.
Documentation
// devela::sys::os::browser::web::event::key::media
//
//! Implements methods for [`KeyMedia`].
//

use crate::KeyMedia;

#[rustfmt::skip]
impl KeyMedia {
    /// Atempts to construct a `KeyMedia` from a JavaScript `KeyboardEvent` physical [code].
    ///
    /// [code]: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code
    pub const fn from_web_code(code: &str) -> Option<Self> {
        use KeyMedia as K;
        match code.as_bytes() {
            b"MediaPlay" => Some(K::Play),
            b"MediaPause" => Some(K::Pause),
            b"MediaPlayPause" => Some(K::PlayPause),
            b"MediaReverse" => Some(K::Reverse),
            b"MediaStop" => Some(K::Stop),
            b"MediaFastForward" => Some(K::FastForward),
            b"MediaRewind" => Some(K::Rewind),
            b"MediaTrackNext" => Some(K::Next),
            b"MediaTrackPrevious" => Some(K::Previous),
            b"MediaRecord" => Some(K::Record),
            b"AudioVolumeDown" => Some(K::LowerVolume),
            b"AudioVolumeUp" => Some(K::RaiseVolume),
            b"AudioVolumeMute" => Some(K::MuteVolume),
            //
            b"Eject" => Some(K::Eject),
            b"MediaSelect" => Some(K::MediaSelect),
            b"LaunchMedia" => Some(K::LaunchMedia),
            b"BassBoost" => Some(K::BassBoost),
            b"BassUp" => Some(K::BassUp),
            b"BassDown" => Some(K::BassDown),
            b"TrebleUp" => Some(K::TrebleUp),
            b"TrebleDown" => Some(K::TrebleDown),
            b"MicrophoneMute" => Some(K::MicrophoneMute),
            b"MicrophoneVolumeUp" => Some(K::MicrophoneVolumeUp),
            b"MicrophoneVolumeDown" => Some(K::MicrophoneVolumeDown),
            b"BrightnessUp" => Some(K::BrightnessUp),
            b"BrightnessDown" => Some(K::BrightnessDown),
            b"Sleep" => Some(K::Sleep),
            b"Wake" => Some(K::Wake),
            b"Power" => Some(K::Power),
            _ => None,
        }
    }
    /// Returns a JavaScript `KeyboardEvent` physical [code].
    ///
    /// [code]: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code
    pub const fn to_web_code(self) -> &'static str {
        use KeyMedia as K;
        match self {
            K::Play => "MediaPlay",
            K::Pause => "MediaPause",
            K::PlayPause => "MediaPlayPause",
            K::Reverse => "MediaReverse",
            K::Stop => "MediaStop",
            K::FastForward => "MediaFastForward",
            K::Rewind => "MediaRewind",
            K::Next => "MediaTrackNext",
            K::Previous => "MediaTrackPrevious",
            K::Record => "MediaRecord",
            K::LowerVolume => "AudioVolumeDown",
            K::RaiseVolume => "AudioVolumeUp",
            K::MuteVolume => "AudioVolumeMute",
            //
            K::Eject => "Eject",
            K::MediaSelect => "MediaSelect",
            K::LaunchMedia => "LaunchMedia",
            K::BassBoost => "BassBoost",
            K::BassUp => "BassUp",
            K::BassDown => "BassDown",
            K::TrebleUp => "TrebleUp",
            K::TrebleDown => "TrebleDown",
            K::MicrophoneMute => "MicrophoneMute",
            K::MicrophoneVolumeUp => "MicrophoneVolumeUp",
            K::MicrophoneVolumeDown => "MicrophoneVolumeDown",
            K::BrightnessUp => "BrightnessUp",
            K::BrightnessDown => "BrightnessDown",
            K::Sleep => "Sleep",
            K::Wake => "Wake",
            K::Power => "Power",
        }
    }

    /// Atempts to construct a `KeyMedia` from a JavaScript `KeyboardEvent` semantic [key].
    ///
    /// [key]: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key
    pub const fn from_web_key(key: &str) -> Option<Self> {
        use KeyMedia as K;
        match key.as_bytes() {
            b"Play" => Some(K::Play),
            b"Pause" => Some(K::Pause),
            b"MediaPlayPause" => Some(K::PlayPause),
            b"MediaReverse" => Some(K::Reverse),
            b"Stop" => Some(K::Stop),
            b"FastForward" => Some(K::FastForward),
            b"Rewind" => Some(K::Rewind),
            b"NextTrack" => Some(K::Next),
            b"PreviousTrack" => Some(K::Previous),
            b"Record" => Some(K::Record),
            b"VolumeDown" => Some(K::LowerVolume),
            b"VolumeUp" => Some(K::RaiseVolume),
            b"VolumeMute" => Some(K::MuteVolume),
            //
            b"Eject" => Some(K::Eject),
            b"MediaSelect" => Some(K::MediaSelect),
            b"LaunchMedia" => Some(K::LaunchMedia),
            b"Bass Boost" => Some(K::BassBoost),
            b"Bass Up" => Some(K::BassUp),
            b"Bass Down" => Some(K::BassDown),
            b"Treble Up" => Some(K::TrebleUp),
            b"Treble Down" => Some(K::TrebleDown),
            b"MicMute" => Some(K::MicrophoneMute),
            b"MicVolumeUp" => Some(K::MicrophoneVolumeUp),
            b"MicVolumeDown" => Some(K::MicrophoneVolumeDown),
            b"BrightnessUp" => Some(K::BrightnessUp),
            b"BrightnessDown" => Some(K::BrightnessDown),
            b"Sleep" => Some(K::Sleep),
            b"Wake" => Some(K::Wake),
            b"Power" => Some(K::Power),
            _ => None,
        }
    }
    /// Returns a JavaScript `KeyboardEvent` semantic [key].
    ///
    /// [key]: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key
    pub const fn to_web_key(self) -> &'static str {
        use KeyMedia as K;
        match self {
            K::Play => "Play",
            K::Pause => "Pause",
            K::PlayPause => "MediaPlayPause",
            K::Reverse => "MediaReverse",
            K::Stop => "Stop",
            K::FastForward => "FastForward",
            K::Rewind => "Rewind",
            K::Next => "NextTrack",
            K::Previous => "PreviousTrack",
            K::Record => "Record",
            K::LowerVolume => "VolumeDown",
            K::RaiseVolume => "VolumeUp",
            K::MuteVolume => "VolumeMute",
            //
            K::Eject => "Eject",
            K::MediaSelect => "MediaSelect",
            K::LaunchMedia => "LaunchMedia",
            K::BassBoost => "Bass Boost",
            K::BassUp => "Bass Up",
            K::BassDown => "Bass Down",
            K::TrebleUp => "Treble Up",
            K::TrebleDown => "Treble Down",
            K::MicrophoneMute => "MicMute",
            K::MicrophoneVolumeUp => "MicVolumeUp",
            K::MicrophoneVolumeDown => "MicVolumeDown",
            K::BrightnessUp => "BrightnessUp",
            K::BrightnessDown => "BrightnessDown",
            K::Sleep => "Sleep",
            K::Wake => "Wake",
            K::Power => "Power",
        }
    }
}