surrealdb_core/iam/entities/
roles.rs1use std::str::FromStr;
2
3use revision::revisioned;
4use serde::{Deserialize, Serialize};
5
6use crate::expr::Ident;
7use crate::iam::Error;
8
9#[revisioned(revision = 1)]
12#[derive(Hash, Copy, Clone, Default, Debug, Eq, PartialEq, PartialOrd, Serialize, Deserialize)]
13#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
14#[non_exhaustive]
15pub enum Role {
16 #[default]
17 Viewer,
18 Editor,
19 Owner,
20}
21
22impl std::fmt::Display for Role {
23 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
24 match self {
25 Self::Viewer => write!(f, "Viewer"),
26 Self::Editor => write!(f, "Editor"),
27 Self::Owner => write!(f, "Owner"),
28 }
29 }
30}
31
32impl FromStr for Role {
33 type Err = Error;
34 fn from_str(s: &str) -> Result<Self, Self::Err> {
35 match s.to_ascii_lowercase().as_str() {
36 "viewer" => Ok(Self::Viewer),
37 "editor" => Ok(Self::Editor),
38 "owner" => Ok(Self::Owner),
39 _ => Err(Error::InvalidRole(s.to_string())),
40 }
41 }
42}
43
44impl std::convert::From<Role> for Ident {
45 fn from(role: Role) -> Self {
46 match role {
47 Role::Viewer => unsafe { Ident::new_unchecked("Viewer".to_owned()) },
48 Role::Editor => unsafe { Ident::new_unchecked("Editor".to_owned()) },
49 Role::Owner => unsafe { Ident::new_unchecked("Owner".to_owned()) },
50 }
51 }
52}