surql_parser/upstream/sql/statements/define/config/
api.rs1use 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}