vegafusion_core/expression/ast/
array.rs

1use crate::expression::ast::expression::ExpressionTrait;
2use crate::proto::gen::expression::{ArrayExpression, Expression};
3use std::fmt::{Display, Formatter};
4
5impl ArrayExpression {
6    pub fn new(elements: Vec<Expression>) -> Self {
7        Self { elements }
8    }
9}
10
11impl ExpressionTrait for ArrayExpression {}
12
13impl Display for ArrayExpression {
14    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
15        let internal_binding_power = 1.0;
16        let mut element_strings: Vec<String> = Vec::new();
17        for element in self.elements.iter() {
18            let arg_binding_power = element.binding_power().0;
19            let element_string = if arg_binding_power > internal_binding_power {
20                format!("{element}")
21            } else {
22                // e.g. the argument is a comma infix operation, so it must be wrapped in parens
23                format!("({element})")
24            };
25            element_strings.push(element_string)
26        }
27
28        let elements_string = element_strings.join(", ");
29        write!(f, "[{elements_string}]")
30    }
31}