Skip to main content

zql_cli/db/
context.rs

1pub struct Context {
2    pub database: Option<String>,
3    pub schema: Option<String>,
4}
5
6impl Context {
7    pub fn new<T: Into<String>>(database: Option<T>, schema: Option<T>) -> Self {
8        let database = database.map(T::into);
9        let schema = schema.map(T::into);
10        Self { database, schema }
11    }
12
13    pub fn to_lowercase(self) -> Self {
14        let database = self.database.as_ref().map(String::as_str).map(str::to_lowercase);
15        let schema = self.schema.as_ref().map(String::as_str).map(str::to_lowercase);
16        Self { database, schema }
17    }
18
19    pub fn as_str(&self) -> (&str, &str) {
20        let database = self.database.as_ref().map(String::as_str).unwrap_or_default();
21        let schema = self.schema.as_ref().map(String::as_str).unwrap_or_default();
22        (database, schema)
23    }
24
25    pub fn and_then<'a>(&self, database: &'a str, schema: &'a str) -> (Option<&'a str>, Option<&'a str>) {
26        let database = self.database.as_ref().and_then(|_| Some(database));
27        let schema = self.schema.as_ref().and_then(|_| Some(schema));
28        (database, schema)
29    }
30}
31
32impl Default for Context {
33    fn default() -> Self {
34        let database = None;
35        let schema = None;
36        Self { database, schema }
37    }
38}