1use crate::schema::index::Index;
2use crate::schema::column::Column;
3
4#[derive(Debug, Clone)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub struct Table {
7 pub schema: Option<String>,
8 pub name: String,
9 pub columns: Vec<Column>,
10 pub indexes: Vec<Index>,
11}
12
13impl Table {
14 pub fn primary_key(&self) -> Option<&Column> {
15 self.columns.iter().find(|c| c.primary_key)
16 }
17
18 pub fn new(name: &str) -> Table {
19 Table {
20 schema: None,
21 name: name.to_string(),
22 columns: vec![],
23 indexes: vec![],
24 }
25 }
26
27 pub fn column(mut self, column: Column) -> Self {
28 self.columns.push(column);
29 self
30 }
31
32 pub fn index(mut self, index: Index) -> Self {
33 self.indexes.push(index);
34 self
35 }
36
37 pub fn schema(mut self, schema: &str) -> Self {
38 self.schema = Some(schema.to_string());
39 self
40 }
41}