#[cfg(feature = "filters")]
pub mod filters;
#[cfg(feature = "filters")]
#[allow(unused_imports)]
pub use filters::{FiltersFeature, IndicatorFilters, MetaFilters, SqlFilters};
use dm_database_parser_sqllog::Sqllog;
use serde::Deserialize;
#[derive(Debug, Deserialize, Clone, Default)]
pub struct FeaturesConfig {
#[cfg(feature = "filters")]
pub filters: Option<FiltersFeature>,
}
impl FeaturesConfig {
pub fn validate() {
#[cfg(feature = "filters")]
FiltersFeature::validate();
}
}
pub trait LogProcessor: Send + Sync + std::fmt::Debug {
fn process(&self, record: &Sqllog) -> bool;
}
#[derive(Debug, Default)]
pub struct Pipeline {
processors: Vec<Box<dyn LogProcessor>>,
}
impl Pipeline {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[cfg(feature = "filters")]
pub fn add(&mut self, processor: Box<dyn LogProcessor>) {
self.processors.push(processor);
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.processors.is_empty()
}
#[inline]
#[must_use]
pub fn run(&self, record: &Sqllog) -> bool {
self.processors.iter().all(|p| p.process(record))
}
}