Skip to main content

vantage_cmd/
expr_data_source.rs

1//! `DataSource` + `ExprDataSource` impls for `Cmd`.
2//!
3//! Same shape as `vantage-aws`: `execute` resolves the single deferred
4//! parameter that `column_table_values_expr` produces (the projection
5//! used by relation traversal). Nothing else needs a real implementation.
6
7use ciborium::Value as CborValue;
8use vantage_core::Result;
9use vantage_expressions::{
10    Expression, defer_execute, execute_by_resolving,
11    traits::datasource::{DataSource, ExprDataSource},
12    traits::expressive::DeferredFn,
13};
14
15use crate::cmd::Cmd;
16
17impl DataSource for Cmd {}
18
19impl ExprDataSource<CborValue> for Cmd {
20    async fn execute(&self, expr: &Expression<CborValue>) -> Result<CborValue> {
21        // A single parameter is a `column_table_values_expr` chain
22        // (Nested → Deferred → Scalar) and collapses to the projected array.
23        execute_by_resolving(
24            expr,
25            |t| CborValue::Text(t.to_string()),
26            |_| async { Ok(CborValue::Null) },
27        )
28        .await
29    }
30
31    fn defer(&self, expr: Expression<CborValue>) -> DeferredFn<CborValue> {
32        defer_execute(self, expr)
33    }
34}