vrl/compiler/expression/
function_argument.rs

1use std::{fmt, ops::Deref};
2
3use crate::compiler::{
4    expression::Expr,
5    parser::{Ident, Node},
6};
7
8#[derive(Clone, Debug, PartialEq)]
9pub struct FunctionArgument {
10    ident: Option<Node<Ident>>,
11    expr: Node<Expr>,
12}
13
14impl FunctionArgument {
15    pub(crate) fn new(ident: Option<Node<Ident>>, expr: Node<Expr>) -> Self {
16        Self { ident, expr }
17    }
18
19    pub(crate) fn keyword(&self) -> Option<&str> {
20        self.ident.as_ref().map(|node| node.as_ref().as_ref())
21    }
22
23    pub(crate) fn keyword_span(&self) -> Option<crate::parser::Span> {
24        self.ident.as_ref().map(Node::span)
25    }
26
27    pub fn expr(&self) -> &Expr {
28        self.expr.inner()
29    }
30
31    pub(crate) fn expr_span(&self) -> crate::parser::Span {
32        self.expr.span()
33    }
34
35    pub(crate) fn into_inner(self) -> Expr {
36        self.expr.into_inner()
37    }
38}
39
40impl fmt::Display for FunctionArgument {
41    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
42        self.expr.fmt(f)
43    }
44}
45
46impl Deref for FunctionArgument {
47    type Target = Node<Expr>;
48
49    fn deref(&self) -> &Self::Target {
50        &self.expr
51    }
52}