Skip to main content

QueryMiddleware

Trait QueryMiddleware 

Source
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§

Source

fn name(&self) -> &str

Unique name for this middleware.

Source

fn transform( &self, results: Vec<QueryResult>, ctx: &QueryContext<'_>, ) -> Vec<QueryResult>

Transform query results. Called after query execution, in registration order.

Implementors§