Skip to main content

surrealdb_expr/expr/statements/define/
user.rs

1use surrealdb_types::{SqlFormat, ToSql};
2
3use super::DefineKind;
4use crate::expr::user::UserDuration;
5use crate::expr::{Base, Expr, Literal};
6use crate::iam::ScramCredential;
7
8#[derive(Clone, Debug, Eq, PartialEq, Hash)]
9pub struct DefineUserStatement {
10	pub kind: DefineKind,
11	pub name: Expr,
12	pub base: Base,
13	pub hash: String,
14	pub code: String,
15	pub roles: Vec<String>,
16	pub duration: UserDuration,
17	pub comment: Expr,
18	/// SCRAM-SHA-256 verifier material, derived alongside `hash` from a plaintext
19	/// password (or supplied via `PASSSCRAM`). `None` for PASSHASH-only users.
20	pub scram: Option<ScramCredential>,
21}
22
23impl Default for DefineUserStatement {
24	fn default() -> Self {
25		Self {
26			kind: DefineKind::Default,
27			name: Expr::Literal(Literal::None),
28			base: Base::Root,
29			hash: String::new(),
30			code: String::new(),
31			roles: vec![],
32			duration: UserDuration::default(),
33			comment: Expr::Literal(Literal::None),
34			scram: None,
35		}
36	}
37}
38
39impl ToSql for DefineUserStatement {
40	fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
41		let stmt: crate::sql::statements::define::DefineUserStatement = self.clone().into();
42		stmt.fmt_sql(f, fmt);
43	}
44}