vrl/compiler/expression/
function_argument.rs1use 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}