Skip to main content

surql_parser/upstream/sql/statements/define/config/
api.rs

1use crate::upstream::fmt::{CoverStmts, EscapeKwFreeIdent, Fmt};
2use crate::upstream::sql::{Expr, Permission};
3use surrealdb_types::{SqlFormat, ToSql, write_sql};
4#[derive(Clone, Debug, Default, Eq, PartialEq)]
5#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
6pub struct ApiConfig {
7	pub middleware: Vec<Middleware>,
8	pub permissions: Permission,
9}
10impl ToSql for ApiConfig {
11	fn fmt_sql(&self, f: &mut String, fmt: SqlFormat) {
12		if !self.middleware.is_empty() {
13			write_sql!(f, fmt, " MIDDLEWARE ");
14			for (idx, m) in self.middleware.iter().enumerate() {
15				if idx != 0 {
16					f.push_str(", ");
17				}
18				for (idx, s) in m.name.split("::").enumerate() {
19					if idx != 0 {
20						f.push_str("::");
21					}
22					EscapeKwFreeIdent(s).fmt_sql(f, fmt);
23				}
24				write_sql!(
25					f,
26					fmt,
27					"({})",
28					Fmt::pretty_comma_separated(m.args.iter().map(CoverStmts))
29				);
30			}
31		}
32		write_sql!(f, fmt, " PERMISSIONS {}", self.permissions);
33	}
34}
35#[derive(Clone, Debug, Default, Eq, PartialEq)]
36pub struct Middleware {
37	pub name: String,
38	pub args: Vec<Expr>,
39}