use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
#[derive(Default)]
pub enum PermissionMode {
ReadOnly,
#[default]
Auto,
Full,
}
impl PermissionMode {
pub fn parse(s: &str) -> Option<Self> {
match s.to_lowercase().as_str() {
"read-only" | "readonly" => Some(Self::ReadOnly),
"auto" => Some(Self::Auto),
"full" => Some(Self::Full),
_ => None,
}
}
pub fn as_str(&self) -> &'static str {
match self {
Self::ReadOnly => "read-only",
Self::Auto => "auto",
Self::Full => "full",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_permission_mode_from_str() {
assert_eq!(
PermissionMode::parse("read-only"),
Some(PermissionMode::ReadOnly)
);
assert_eq!(PermissionMode::parse("auto"), Some(PermissionMode::Auto));
assert_eq!(PermissionMode::parse("full"), Some(PermissionMode::Full));
assert_eq!(PermissionMode::parse("invalid"), None);
}
#[test]
fn test_permission_mode_default() {
assert_eq!(PermissionMode::default(), PermissionMode::Auto);
}
}