use crate::ast::identifiers::ObjectId;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Privilege {
Select,
Insert,
Update,
Delete,
Truncate,
References,
Trigger,
All,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PrivilegeGrant {
pub on: ObjectId, pub privileges: Vec<Privilege>, pub grantee: ObjectId, pub with_grant_option: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RoleState {
pub id: ObjectId, pub can_login: bool,
pub is_superuser: bool,
pub member_of: Vec<ObjectId>, pub granted_privileges: Vec<PrivilegeGrant>,
}
#[derive(Debug, Clone, PartialEq)]
pub enum RoleOverlay {
Present(RoleState),
Dropped,
}