vegafusion_runtime/transform/
mod.rs

1pub mod aggregate;
2pub mod bin;
3pub mod collect;
4pub mod extent;
5pub mod filter;
6pub mod fold;
7pub mod formula;
8pub mod identifier;
9pub mod impute;
10pub mod joinaggregate;
11pub mod pipeline;
12pub mod pivot;
13pub mod project;
14pub mod sequence;
15pub mod stack;
16pub mod timeunit;
17pub mod utils;
18pub mod window;
19
20use crate::expression::compiler::config::CompilationConfig;
21
22use async_trait::async_trait;
23use datafusion::prelude::DataFrame;
24use vegafusion_core::error::Result;
25use vegafusion_core::proto::gen::transforms::transform::TransformKind;
26use vegafusion_core::proto::gen::transforms::Transform;
27use vegafusion_core::task_graph::task_value::TaskValue;
28use vegafusion_core::transform::TransformDependencies;
29
30#[async_trait]
31pub trait TransformTrait: TransformDependencies {
32    async fn eval(
33        &self,
34        dataframe: DataFrame,
35        config: &CompilationConfig,
36    ) -> Result<(DataFrame, Vec<TaskValue>)>;
37}
38
39pub fn to_transform_trait(tx: &TransformKind) -> &dyn TransformTrait {
40    match tx {
41        TransformKind::Filter(tx) => tx,
42        TransformKind::Extent(tx) => tx,
43        TransformKind::Formula(tx) => tx,
44        TransformKind::Bin(tx) => tx,
45        TransformKind::Aggregate(tx) => tx,
46        TransformKind::Collect(tx) => tx,
47        TransformKind::Timeunit(tx) => tx,
48        TransformKind::Joinaggregate(tx) => tx,
49        TransformKind::Window(tx) => tx,
50        TransformKind::Project(tx) => tx,
51        TransformKind::Stack(tx) => tx,
52        TransformKind::Impute(tx) => tx,
53        TransformKind::Pivot(tx) => tx,
54        TransformKind::Identifier(tx) => tx,
55        TransformKind::Fold(tx) => tx,
56        TransformKind::Sequence(tx) => tx,
57    }
58}
59
60#[async_trait]
61impl TransformTrait for Transform {
62    async fn eval(
63        &self,
64        sql_df: DataFrame,
65        config: &CompilationConfig,
66    ) -> Result<(DataFrame, Vec<TaskValue>)> {
67        to_transform_trait(self.transform_kind())
68            .eval(sql_df, config)
69            .await
70    }
71}