vegafusion_runtime/signal/
mod.rs

1use crate::data::tasks::build_compilation_config;
2use crate::expression::compiler::compile;
3use crate::expression::compiler::utils::ExprHelpers;
4use crate::task_graph::task::TaskCall;
5use async_trait::async_trait;
6use datafusion::prelude::SessionContext;
7use std::collections::HashMap;
8use std::sync::Arc;
9use vegafusion_core::data::dataset::VegaFusionDataset;
10
11use crate::task_graph::timezone::RuntimeTzConfig;
12use vegafusion_core::error::Result;
13use vegafusion_core::proto::gen::tasks::SignalTask;
14use vegafusion_core::task_graph::task::TaskDependencies;
15use vegafusion_core::task_graph::task_value::TaskValue;
16
17#[async_trait]
18impl TaskCall for SignalTask {
19    async fn eval(
20        &self,
21        values: &[TaskValue],
22        tz_config: &Option<RuntimeTzConfig>,
23        _inline_datasets: HashMap<String, VegaFusionDataset>,
24        _ctx: Arc<SessionContext>,
25    ) -> Result<(TaskValue, Vec<TaskValue>)> {
26        let config = build_compilation_config(&self.input_vars(), values, tz_config);
27        let expression = self.expr.as_ref().unwrap();
28        let expr = compile(expression, &config, None)?;
29        let value = expr.eval_to_scalar()?;
30        let task_value = TaskValue::Scalar(value);
31        Ok((task_value, Default::default()))
32    }
33}