vegafusion_core/spec/transform/
identifier.rs

1use crate::expression::column_usage::{ColumnUsage, DatasetsColumnUsage, VlSelectionFields};
2use crate::spec::transform::{TransformColumns, TransformSpecTrait};
3use crate::task_graph::graph::ScopedVariable;
4use crate::task_graph::scope::TaskScope;
5use serde::{Deserialize, Serialize};
6use serde_json::Value;
7use std::collections::HashMap;
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
10pub struct IdentifierTransformSpec {
11    #[serde(rename = "as")]
12    pub as_: String,
13
14    #[serde(flatten)]
15    pub extra: HashMap<String, Value>,
16}
17
18impl TransformSpecTrait for IdentifierTransformSpec {
19    fn supported(&self) -> bool {
20        true
21    }
22
23    fn transform_columns(
24        &self,
25        _datum_var: &Option<ScopedVariable>,
26        _usage_scope: &[u32],
27        _task_scope: &TaskScope,
28        _vl_selection_fields: &VlSelectionFields,
29    ) -> TransformColumns {
30        let usage = DatasetsColumnUsage::empty();
31        let produced = ColumnUsage::from(self.as_.as_str());
32        TransformColumns::PassThrough { usage, produced }
33    }
34
35    fn local_datetime_columns_produced(
36        &self,
37        input_local_datetime_columns: &[String],
38    ) -> Vec<String> {
39        // Keep input local datetime columns as identifier passes through all input columns
40        // and doesn't create an columns
41        Vec::from(input_local_datetime_columns)
42    }
43}