#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Span {
pub start: usize,
pub end: usize,
}
#[derive(Debug, Clone)]
pub struct SchemaFile {
pub datasource: Option<Datasource>,
pub generators: Vec<Generator>,
pub enums: Vec<EnumDef>,
pub models: Vec<ModelDef>,
}
#[derive(Debug, Clone)]
pub struct Datasource {
pub name: String,
pub provider: String,
pub url: StringOrEnv,
pub span: Span,
}
#[derive(Debug, Clone)]
pub enum StringOrEnv {
Literal(String),
Env(String),
}
#[derive(Debug, Clone)]
pub struct Generator {
pub name: String,
pub output: Option<String>,
pub span: Span,
}
#[derive(Debug, Clone)]
pub struct EnumDef {
pub name: String,
pub variants: Vec<String>,
pub db_name: Option<String>,
pub span: Span,
}
#[derive(Debug, Clone)]
pub struct ModelDef {
pub name: String,
pub fields: Vec<FieldDef>,
pub attributes: Vec<BlockAttribute>,
pub span: Span,
}
#[derive(Debug, Clone)]
pub struct FieldDef {
pub name: String,
pub field_type: FieldType,
pub attributes: Vec<FieldAttribute>,
pub span: Span,
}
#[derive(Debug, Clone)]
pub struct FieldType {
pub name: String,
pub is_list: bool,
pub is_optional: bool,
}
#[derive(Debug, Clone)]
pub enum FieldAttribute {
Id,
Unique,
Default(DefaultValue),
UpdatedAt,
Relation(RelationAttribute),
Map(String),
DbType(String, Vec<String>),
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum DefaultValue {
Uuid,
Cuid,
AutoIncrement,
Now,
Literal(LiteralValue),
EnumVariant(String),
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum LiteralValue {
String(String),
Int(i64),
Float(f64),
Bool(bool),
}
#[derive(Debug, Clone)]
pub struct RelationAttribute {
pub name: Option<String>,
pub fields: Vec<String>,
pub references: Vec<String>,
pub on_delete: Option<ReferentialAction>,
pub on_update: Option<ReferentialAction>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ReferentialAction {
Cascade,
Restrict,
NoAction,
SetNull,
SetDefault,
}
#[derive(Debug, Clone)]
pub enum BlockAttribute {
Index(Vec<String>),
Unique(Vec<String>),
Map(String),
Id(Vec<String>),
}