msw_hotkey/hotkey/
modifier.rs

1use std::str::FromStr;
2
3use super::parse_hotkey_error::ParseHotkeyError;
4
5#[derive(Debug, PartialEq)]
6pub enum Modifier {
7    Alt = 1,
8    Ctrl = 2,
9    Shift = 4,
10    Win = 8,
11}
12
13impl From<Modifier> for u8 {
14    fn from(m: Modifier) -> Self {
15        m as u8
16    }
17}
18
19impl FromStr for Modifier {
20    type Err = ParseHotkeyError;
21
22    fn from_str(s: &str) -> Result<Self, Self::Err> {
23        let lower_case_s = s.to_ascii_lowercase();
24        if lower_case_s.is_empty() {
25            return Err(ParseHotkeyError::MissingModifier);
26        }
27        match lower_case_s.as_str() {
28            "ctrl" => Ok(Modifier::Ctrl),
29            "alt" => Ok(Modifier::Alt),
30            "shift" => Ok(Modifier::Shift),
31            "win" => Ok(Modifier::Win),
32            _ => Err(ParseHotkeyError::UnexpectedModifier),
33        }
34    }
35}