mod constraints;
pub use constraints::{ForeignKey, Index, Unique};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Enum {
pub name: String,
pub values: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Column {
pub name: String,
pub sql_type: String,
pub nullable: bool,
pub default: Option<String>,
pub auto_increment: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Table {
pub name: String,
pub columns: Vec<Column>,
pub primary_key: Vec<String>,
pub foreign_keys: Vec<ForeignKey>,
pub uniques: Vec<Unique>,
pub indexes: Vec<Index>,
}
impl Table {
pub fn column(&self, name: &str) -> Option<&Column> {
self.columns.iter().find(|column| column.name == name)
}
pub fn has_simple_key(&self) -> bool {
self.primary_key.len() == 1
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct Schema {
pub tables: Vec<Table>,
pub enums: Vec<Enum>,
}
impl Schema {
pub fn table(&self, name: &str) -> Option<&Table> {
self.tables.iter().find(|table| table.name == name)
}
pub fn enum_type(&self, name: &str) -> Option<&Enum> {
self.enums.iter().find(|item| item.name == name)
}
}