pub(crate) trait Filter {
fn generate_condition(&self, has_joins: bool) -> impl sea_query::IntoCondition;
}
pub(crate) trait StatementExt {
fn apply_filter<F: Filter>(&mut self, filter: F) -> &mut Self;
}
pub(crate) trait StatementWithJoinsExt {
fn apply_filter_with_joins<F: Filter>(&mut self, filter: F) -> &mut Self;
}
impl StatementWithJoinsExt for sea_query::SelectStatement {
fn apply_filter_with_joins<F: Filter>(&mut self, filter: F) -> &mut Self {
let condition = filter.generate_condition(true);
self.cond_where(condition)
}
}
impl StatementExt for sea_query::SelectStatement {
fn apply_filter<F: Filter>(&mut self, filter: F) -> &mut Self {
let condition = filter.generate_condition(false);
self.cond_where(condition)
}
}
impl StatementExt for sea_query::UpdateStatement {
fn apply_filter<F: Filter>(&mut self, filter: F) -> &mut Self {
let condition = filter.generate_condition(false);
self.cond_where(condition)
}
}
impl StatementExt for sea_query::DeleteStatement {
fn apply_filter<F: Filter>(&mut self, filter: F) -> &mut Self {
let condition = filter.generate_condition(false);
self.cond_where(condition)
}
}