schema_model/model/
database_model.rs1use crate::model::enum_type::EnumType;
2use crate::model::schema::Schema;
3use crate::model::table::Table;
4use crate::model::types::{BooleanMode, ForeignKeyMode, Version};
5
6#[derive(Debug, Default)]
7pub struct DatabaseModel {
8 version: Option<Version>,
9 foreign_key_mode: ForeignKeyMode,
10 boolean_mode: BooleanMode,
11 schemas: Vec<Schema>,
12}
13
14impl DatabaseModel {
15 pub fn new(version: Option<Version>,
16 boolean_mode: BooleanMode,
17 foreign_key_mode: ForeignKeyMode,
18 schemas: Vec<Schema>) -> Self {
19 Self {
20 version,
21 boolean_mode,
22 foreign_key_mode,
23 schemas,
24 }
25 }
26
27 pub fn version(&self) -> Option<&Version> {
28 self.version.as_ref()
29 }
30
31 pub fn foreign_key_mode(&self) -> ForeignKeyMode {
32 self.foreign_key_mode
33 }
34
35 pub fn boolean_mode(&self) -> BooleanMode {
36 self.boolean_mode
37 }
38
39 pub fn schemas(&self) -> &Vec<Schema> {
40 &self.schemas
41 }
42
43 pub fn default_schema(&self) -> &Schema {
44 self.schemas
45 .iter()
46 .find(|s| s.schema_name().is_none())
47 .expect("Default schema not found")
48 }
49
50 pub fn default_schema_mut(&mut self) -> &mut Schema {
51 self.schemas
52 .iter_mut()
53 .find(|s| s.schema_name().is_none())
54 .expect("Default schema not found")
55 }
56
57 pub fn find_schema(&self, schema_name: Option<&str>) -> &Schema {
58 if schema_name.is_none() {
59 return self.default_schema();
60 }
61
62 self.schemas
63 .iter()
64 .filter(|s| s.schema_name().is_some())
65 .find(|s| s.schema_name().unwrap() == schema_name.unwrap())
66 .expect("Schema not found")
67 }
68
69 pub(crate) fn find_schema_mut(&mut self, schema_name: Option<&str>) -> &mut Schema {
70 if schema_name.is_none() {
71 return self.default_schema_mut();
72 }
73
74 self.schemas
75 .iter_mut()
76 .filter(|s| s.schema_name().is_some())
77 .find(|s| s.schema_name().unwrap() == schema_name.unwrap())
78 .expect("Schema not found")
79 }
80
81 pub fn find_enum_type(&self, schema_name: Option<&str>, enum_type: &str) -> &EnumType {
82 let schema = self.find_schema(schema_name);
83 schema.get_enum_type(enum_type)
84 }
85
86 pub fn all_tables(&self) -> Vec<&Table> {
87 self.schemas
88 .iter()
89 .flat_map(|s| s.tables())
90 .collect()
91 }
92
93 pub fn find_table(&self, schema_name: Option<&str>, table_name: &str) -> &Table {
94 let schema = self.find_schema(schema_name);
95 schema.get_table(table_name)
96 }
97
98 pub fn find_table_mut(&mut self, schema_name: Option<&str>, table_name: &str) -> &mut Table {
99 let schema = self.find_schema_mut(schema_name);
100 schema.get_table_mut(table_name)
101 }
102}