use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrismaDatasource {
pub provider: String,
pub url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrismaModel {
pub name: String,
pub fields: Vec<PrismaField>,
pub attributes: Vec<PrismaModelAttribute>,
pub documentation: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrismaField {
pub name: String,
pub field_type: PrismaFieldType,
pub is_optional: bool,
pub is_list: bool,
pub attributes: Vec<PrismaFieldAttribute>,
pub documentation: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum PrismaFieldType {
String,
Boolean,
Int,
BigInt,
Float,
Decimal,
DateTime,
Json,
Bytes,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PrismaFieldAttribute {
Id,
Unique,
Default(PrismaDefaultValue),
Map(String),
Relation {
name: Option<String>,
fields: Option<Vec<String>>,
references: Option<Vec<String>>,
on_delete: Option<String>,
on_update: Option<String>,
map: Option<String>,
},
UpdatedAt,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PrismaDefaultValue {
Literal(String),
Function(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PrismaModelAttribute {
Id(Vec<String>),
Unique {
fields: Vec<String>,
name: Option<String>,
},
Index {
fields: Vec<String>,
name: Option<String>,
},
Map(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrismaEnum {
pub name: String,
pub values: Vec<String>,
pub documentation: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrismaSchema {
pub datasource: Option<PrismaDatasource>,
pub models: Vec<PrismaModel>,
pub enums: Vec<PrismaEnum>,
}