use surrealdb_strand::Strand;
use surrealdb_types::{SqlFormat, ToSql};
use crate::expr::{Base, Cond, RecordIdLit};
use crate::val::Duration;
pub static GRANT_BEARER_CHARACTER_POOL: &[u8] =
b"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
pub static GRANT_BEARER_ID_LENGTH: usize = 12;
pub static GRANT_BEARER_KEY_LENGTH: usize = 24;
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
pub enum AccessStatement {
Grant(AccessStatementGrant), Show(AccessStatementShow), Revoke(AccessStatementRevoke), Purge(AccessStatementPurge), }
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
pub struct AccessStatementGrant {
pub ac: Strand,
pub base: Option<Base>,
pub subject: Subject,
}
#[derive(Clone, Debug, Default, Eq, PartialEq, Hash)]
pub struct AccessStatementShow {
pub ac: Strand,
pub base: Option<Base>,
pub gr: Option<Strand>,
pub cond: Option<Cond>,
}
#[derive(Clone, Debug, Default, Eq, PartialEq, Hash)]
pub struct AccessStatementRevoke {
pub ac: Strand,
pub base: Option<Base>,
pub gr: Option<Strand>,
pub cond: Option<Cond>,
}
#[derive(Clone, Debug, Default, Eq, PartialEq, Hash)]
pub struct AccessStatementPurge {
pub ac: Strand,
pub base: Option<Base>,
pub kind: PurgeKind,
pub grace: Duration,
}
#[derive(Clone, Debug, Default, Eq, PartialEq, Hash)]
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
pub enum PurgeKind {
#[default]
Expired,
Revoked,
Both,
}
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
pub enum Subject {
Record(RecordIdLit),
User(Strand),
}
impl ToSql for AccessStatement {
fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
let sql_stmt: crate::sql::statements::AccessStatement = self.clone().into();
sql_stmt.fmt_sql(f, fmt);
}
}