use std::{ops::Deref, str::FromStr};
use crate::field::rules::alpha::Alpha;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct PermissionGroup(Alpha);
impl FromStr for PermissionGroup {
type Err = InvalidEncodedPermissionGroup;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(Self(s.parse().map_err(|_| InvalidEncodedPermissionGroup)?))
}
}
#[derive(Debug, thiserror::Error)]
#[error("Invalid encoded permission group.")]
pub struct InvalidEncodedPermissionGroup;
impl Deref for PermissionGroup {
type Target = str;
fn deref(&self) -> &Self::Target {
self.0.as_ref()
}
}
impl PermissionGroup {
pub const USER: Self = Self(Alpha::new_small_unchecked("user"));
pub const PUBLIC: Self = Self(Alpha::new_small_unchecked("public"));
}