use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SchemaTypes {
pub version: u32,
pub generated_at: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub database: Option<String>,
pub tables: Vec<TableDef>,
pub functions: Vec<FunctionDef>,
pub params: Vec<ParamDef>,
pub analyzers: Vec<NamedDef>,
pub accesses: Vec<NamedDef>,
pub apis: Vec<NamedDef>,
pub buckets: Vec<NamedDef>,
pub sequences: Vec<NamedDef>,
pub configs: Vec<NamedDef>,
pub models: Vec<NamedDef>,
pub users: Vec<NamedDef>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct NamedDef {
pub name: String,
pub define: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct TableDef {
pub name: String,
pub define: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub schemafull: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
pub fields: Vec<FieldDef>,
pub events: Vec<NamedDef>,
pub indexes: Vec<NamedDef>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct FieldDef {
pub name: String,
pub define: String,
pub r#type: FieldType,
pub optional: bool,
pub flexible: bool,
pub readonly: bool,
pub has_default: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub raw_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct FunctionDef {
pub name: String,
pub define: String,
pub args: Vec<FnArg>,
#[serde(skip_serializing_if = "Option::is_none")]
pub returns: Option<FieldType>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct FnArg {
pub name: String,
pub r#type: FieldType,
pub optional: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct ParamDef {
pub name: String,
pub define: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(tag = "kind", rename_all = "camelCase")]
pub enum FieldType {
Primitive {
name: PrimitiveType,
},
Option {
inner: Box<FieldType>,
},
Array {
inner: Box<FieldType>,
max: Option<u64>,
},
Set {
inner: Box<FieldType>,
max: Option<u64>,
},
Record {
tables: Vec<String>,
},
Geometry {
kinds: Vec<String>,
},
Literal {
value: serde_json::Value,
},
Union {
variants: Vec<FieldType>,
},
Object {
fields: Vec<ObjectField>,
},
Unknown {
source: String,
},
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ObjectField {
pub name: String,
pub r#type: FieldType,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum PrimitiveType {
String,
Int,
Float,
Bool,
Number,
Decimal,
Datetime,
Duration,
Uuid,
Bytes,
Any,
Null,
None,
Object,
Function,
}