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}