Skip to main content

schema_model/model/
function.rs

1use crate::model::types::DatabaseType;
2
3#[derive(Debug, Clone)]
4pub struct Function {
5    schema_name: Option<String>,
6    name: String,
7    database_type: DatabaseType,
8    sql: String,
9}
10
11impl Function {
12    pub fn new<S: Into<String>>(
13        schema_name: Option<S>,
14        name: S,
15        database_type: DatabaseType,
16        sql: S,
17    ) -> Self {
18        Self {
19            schema_name: schema_name.map(|s| s.into()),
20            name: name.into(),
21            database_type,
22            sql: sql.into(),
23        }
24    }
25
26    pub fn schema_name(&self) -> Option<&str> {
27        self.schema_name.as_deref()
28    }
29
30    pub fn name(&self) -> &str {
31        &self.name
32    }
33
34    pub fn database_type(&self) -> DatabaseType {
35        self.database_type
36    }
37
38    pub fn sql(&self) -> &str {
39        &self.sql
40    }
41}
42
43#[cfg(test)]
44mod tests {
45    use super::*;
46    use crate::model::types::DatabaseType;
47
48    #[test]
49    fn constructor_and_getters() {
50        let f = Function::new(Some("public"), "f1", DatabaseType::Postgresql, "select 1");
51        assert_eq!(f.schema_name().unwrap(), "public");
52        assert_eq!(f.name(), "f1");
53        assert_eq!(f.database_type(), DatabaseType::Postgresql);
54        assert_eq!(f.sql(), "select 1");
55    }
56}