schema_model/model/
view.rs1use crate::model::types::DatabaseType;
2use std::fmt;
3
4#[derive(Debug, Clone)]
5pub struct View {
6 schema_name: Option<String>,
7 name: String,
8 sql: String,
9 database_type: Option<DatabaseType>,
10}
11impl View {
12 pub fn new<S: Into<String>>(
13 schema_name: Option<S>,
14 name: S,
15 sql: S,
16 database_type: Option<DatabaseType>,
17 ) -> Self {
18 Self {
19 schema_name: schema_name.map(|s| s.into()),
20 name: name.into(),
21 sql: sql.into(),
22 database_type,
23 }
24 }
25 pub fn schema_name(&self) -> Option<&str> {
26 self.schema_name.as_deref()
27 }
28
29 pub fn name(&self) -> &str {
30 &self.name
31 }
32
33 pub fn sql(&self) -> &str {
34 &self.sql
35 }
36
37 pub fn database_type(&self) -> Option<DatabaseType> {
38 self.database_type
39 }
40
41 pub fn fully_qualified_view_name(&self) -> String {
42 match self.schema_name() {
43 Some(schema_name) => format!("{}.{}", schema_name, self.name()),
44 None => self.name().to_string(),
45 }
46 }
47}
48
49impl fmt::Display for View {
50 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
51 match &self.schema_name {
52 Some(schema) => write!(f, "{}.{}", schema, self.name),
53 None => write!(f, "{}", self.name),
54 }
55 }
56}
57
58#[cfg(test)]
59mod tests {
60 use super::*;
61
62 #[test]
63 fn constructor_and_getters_and_display() {
64 let v = View::new(Some("s"), "v1", "select *", Some(DatabaseType::Postgresql));
65 assert_eq!(v.schema_name().unwrap(), "s");
66 assert_eq!(v.name(), "v1");
67 assert_eq!(v.sql(), "select *");
68 assert_eq!(v.database_type().unwrap(), DatabaseType::Postgresql);
69 assert_eq!(format!("{}", v), "s.v1");
70 }
71}