Skip to main content

schema_model/model/
relation.rs

1use crate::model::types::RelationType;
2
3#[derive(Debug, Clone)]
4pub struct Relation {
5    to_table_name: String,
6    to_column_name: String,
7    from_table_name: String,
8    from_column_name: String,
9    relation_type: RelationType,
10    disable_usage_checking: bool,
11}
12impl Relation {
13    #[allow(clippy::too_many_arguments)]
14    pub fn new<SS: Into<String>>(
15        to_table_name: SS,
16        to_column_name: SS,
17        from_table_name: SS,
18        from_column_name: SS,
19        relation_type: RelationType,
20        disable_usage_checking: bool,
21    ) -> Self {
22        Self {
23            to_table_name: to_table_name.into(),
24            to_column_name: to_column_name.into(),
25            from_table_name: from_table_name.into(),
26            from_column_name: from_column_name.into(),
27            relation_type,
28            disable_usage_checking,
29        }
30    }
31    pub fn to_table_name(&self) -> &str {
32        &self.to_table_name
33    }
34    pub fn to_column_name(&self) -> &str {
35        &self.to_column_name
36    }
37    pub fn from_table_name(&self) -> &str {
38        &self.from_table_name
39    }
40    pub fn from_column_name(&self) -> &str {
41        &self.from_column_name
42    }
43    pub fn relation_type(&self) -> RelationType {
44        self.relation_type
45    }
46
47    pub fn disable_usage_checking(&self) -> bool {
48        self.disable_usage_checking
49    }
50}
51
52#[cfg(test)]
53mod tests {
54    use super::*;
55    use crate::model::types::RelationType;
56
57    #[test]
58    fn constructor_and_getters() {
59        let r = Relation::new(
60            "parent",
61            "id",
62            "child",
63            "parent_id",
64            RelationType::Cascade,
65            true,
66        );
67        assert_eq!(r.to_table_name(), "parent");
68        assert_eq!(r.to_column_name(), "id");
69        assert_eq!(r.from_table_name(), "child");
70        assert_eq!(r.from_column_name(), "parent_id");
71        assert_eq!(r.relation_type(), RelationType::Cascade);
72        assert!(r.disable_usage_checking());
73    }
74}