pub trait QueryMiddleware: Send + Sync {
// Required methods
fn name(&self) -> &str;
fn transform(
&self,
results: Vec<QueryResult>,
ctx: &QueryContext<'_>,
) -> Vec<QueryResult>;
}Expand description
A middleware that can transform query results after AQL runs them.
Implement this trait to filter, sort, augment, or replace results. Middleware are applied in registration order.
§Example
use amql_engine::{QueryContext, QueryMiddleware, QueryResult};
struct OwnerFilter { owner: String }
impl QueryMiddleware for OwnerFilter {
fn name(&self) -> &str { "owner-filter" }
fn transform(&self, results: Vec<QueryResult>, _ctx: &QueryContext<'_>) -> Vec<QueryResult> {
results.into_iter()
.filter(|r| r.annotations.iter()
.any(|a| a.attrs.get("owner")
.and_then(|v| v.as_str())
.map(|v| v == self.owner)
.unwrap_or(false)))
.collect()
}
}Required Methods§
Sourcefn transform(
&self,
results: Vec<QueryResult>,
ctx: &QueryContext<'_>,
) -> Vec<QueryResult>
fn transform( &self, results: Vec<QueryResult>, ctx: &QueryContext<'_>, ) -> Vec<QueryResult>
Transform query results. Called after query execution, in registration order.