vegafusion_runtime/transform/
filter.rs1use crate::expression::compiler::compile;
2use crate::expression::compiler::config::CompilationConfig;
3use crate::transform::TransformTrait;
4use async_trait::async_trait;
5use datafusion::prelude::DataFrame;
6use vegafusion_common::datatypes::to_boolean;
7
8use vegafusion_core::error::Result;
9use vegafusion_core::proto::gen::transforms::Filter;
10use vegafusion_core::task_graph::task_value::TaskValue;
11
12#[async_trait]
13impl TransformTrait for Filter {
14 async fn eval(
15 &self,
16 dataframe: DataFrame,
17 config: &CompilationConfig,
18 ) -> Result<(DataFrame, Vec<TaskValue>)> {
19 let filter_expr = compile(
20 self.expr.as_ref().unwrap(),
21 config,
22 Some(dataframe.schema()),
23 )?;
24
25 let filter_expr = to_boolean(filter_expr, dataframe.schema())?;
27 let result = dataframe.filter(filter_expr)?;
28 Ok((result, Default::default()))
29 }
30}