vegafusion_runtime/transform/
mod.rs1pub 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}