vantage_csv/
expr_data_source.rs1use vantage_expressions::traits::datasource::ExprDataSource;
5use vantage_expressions::traits::expressive::DeferredFn;
6use vantage_expressions::{Expression, defer_execute, execute_by_resolving};
7
8use crate::Csv;
9use crate::condition::resolve_param;
10use crate::type_system::AnyCsvType;
11
12impl ExprDataSource<AnyCsvType> for Csv {
13 async fn execute(&self, expr: &Expression<AnyCsvType>) -> vantage_core::Result<AnyCsvType> {
14 execute_by_resolving(
17 expr,
18 |template| AnyCsvType::new(template.to_string()),
19 |params| async move {
20 let mut results = Vec::with_capacity(params.len());
21 for param in params {
22 results.push(resolve_param(param).await?.value().clone());
23 }
24 Ok(AnyCsvType::new(results.join(",")))
25 },
26 )
27 .await
28 }
29
30 fn defer(&self, expr: Expression<AnyCsvType>) -> DeferredFn<AnyCsvType>
31 where
32 AnyCsvType: Clone + Send + Sync + 'static,
33 {
34 defer_execute(self, expr)
35 }
36}