Skip to main content

fluent4rs/ast/
argument.rs

1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3
4use super::{InlineExpression, NamedArgument};
5#[cfg(feature = "walker")]
6use crate::walker::{Visitor, Walkable, Walker};
7
8/// [Argument](crate::ast::Argument) ::= [NamedArgument](crate::ast::NamedArgument)
9///  | [InlineExpression](crate::ast::InlineExpression)
10#[derive(Clone, Debug, PartialEq)]
11#[cfg_attr(feature = "hash", derive(Eq, PartialOrd, Ord, Hash))]
12#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
13pub enum Argument {
14    #[doc(hidden)]
15    NamedArgument(NamedArgument),
16
17    #[doc(hidden)]
18    InlineExpression(InlineExpression),
19}
20
21#[cfg(feature = "walker")]
22impl Walkable for Argument {
23    fn walk(&self, visitor: &mut dyn Visitor) {
24        visitor.visit_argument(self);
25        match self {
26            Self::NamedArgument(argument) => Walker::walk(argument, visitor),
27            Self::InlineExpression(expression) => Walker::walk(expression, visitor),
28        }
29    }
30}
31
32impl std::fmt::Display for Argument {
33    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34        let value = match self {
35            Self::NamedArgument(argument) => argument.to_string(),
36            Self::InlineExpression(argument) => argument.to_string(),
37        };
38        write!(f, "{value}")
39    }
40}