1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum Protection {
#[cfg_attr(feature = "serde", serde(rename = "s"))]
Secure,
#[cfg_attr(feature = "serde", serde(rename = "n"))]
NonSecure,
#[cfg_attr(feature = "serde", serde(rename = "p"))]
Privileged,
}
impl Default for Protection {
fn default() -> Self {
Self::NonSecure
}
}
impl Protection {
pub fn parse_str(s: &str) -> Option<Self> {
match s {
"s" => Some(Self::Secure),
"n" => Some(Self::NonSecure),
"p" => Some(Self::Privileged),
_ => None,
}
}
pub const fn as_str(self) -> &'static str {
match self {
Self::Secure => "s",
Self::NonSecure => "n",
Self::Privileged => "p",
}
}
}