diff --git a/src/config.rs b/src/config.rs index 9228b9bb..8863b92b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -763,15 +763,26 @@ pub struct Plugins { pub prewarmer: Option, } +pub trait Plugin { + fn is_enabled(&self) -> bool; +} + impl std::fmt::Display for Plugins { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + fn is_enabled(arg: Option<&T>) -> bool { + if let Some(ref arg) = arg { + arg.is_enabled() + } else { + false + } + } write!( f, "interceptor: {}, table_access: {}, query_logger: {}, prewarmer: {}", - self.intercept.is_some(), - self.table_access.is_some(), - self.query_logger.is_some(), - self.prewarmer.is_some(), + is_enabled(self.intercept.as_ref()), + is_enabled(self.table_access.as_ref()), + is_enabled(self.query_logger.as_ref()), + is_enabled(self.prewarmer.as_ref()), ) } } @@ -782,23 +793,47 @@ pub struct Intercept { pub queries: BTreeMap, } +impl Plugin for Intercept { + fn is_enabled(&self) -> bool { + self.enabled + } +} + #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default, Hash, Eq)] pub struct TableAccess { pub enabled: bool, pub tables: Vec, } +impl Plugin for TableAccess { + fn is_enabled(&self) -> bool { + self.enabled + } +} + #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default, Hash, Eq)] pub struct QueryLogger { pub enabled: bool, } +impl Plugin for QueryLogger { + fn is_enabled(&self) -> bool { + self.enabled + } +} + #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default, Hash, Eq)] pub struct Prewarmer { pub enabled: bool, pub queries: Vec, } +impl Plugin for Prewarmer { + fn is_enabled(&self) -> bool { + self.enabled + } +} + impl Intercept { pub fn substitute(&mut self, db: &str, user: &str) { for (_, query) in self.queries.iter_mut() {