air_lambda_ast/ast/
traits.rs

1/*
2 * Copyright 2021 Fluence Labs Limited
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17use super::*;
18use itertools::Itertools;
19
20use std::fmt;
21
22impl fmt::Display for LambdaAST<'_> {
23    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24        use LambdaAST::*;
25
26        match self {
27            Functor(functor) => write!(f, ".{functor}"),
28            ValuePath(value_path) => write!(f, ".$.{}", value_path.iter().join(".")),
29        }
30    }
31}
32
33impl fmt::Display for ValueAccessor<'_> {
34    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
35        use ValueAccessor::*;
36
37        match self {
38            ArrayAccess { idx } => write!(f, "[{idx}]"),
39            FieldAccessByName { field_name } => write!(f, "{field_name}"),
40            FieldAccessByScalar { scalar_name } => write!(f, "[{scalar_name}]"),
41            Error => write!(f, "a parser error occurred while parsing lambda expression"),
42        }
43    }
44}
45
46impl fmt::Display for Functor {
47    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
48        use Functor::*;
49
50        match self {
51            Length => write!(f, "length"),
52        }
53    }
54}