prometheus_parser/types/
expression.rs1use std::fmt;
4
5use super::function::Function;
6use super::group::Group;
7use super::operator::Operator;
8use super::return_value::{LabelSetOp, ReturnKind, ReturnValue};
9use super::selector::Selector;
10
11#[derive(PartialEq, Clone)]
15pub enum Expression {
16 Float(f64),
18
19 String(String),
24
25 Selector(Selector),
27
28 Group(Group),
30
31 Function(Function),
33
34 Operator(Operator)
36}
37
38impl Expression {
40 pub fn group(self) -> Expression {
43 Group::new(self).wrap()
44 }
45
46 pub fn return_value(&self) -> ReturnValue {
50 match self {
51 Expression::Float(_) => ReturnValue {
52 kind: ReturnKind::Scalar,
53 label_ops: vec![LabelSetOp::clear(self.clone(), None)]
54 },
55 Expression::String(_) => ReturnValue {
56 kind: ReturnKind::String,
57 label_ops: vec![LabelSetOp::clear(self.clone(), None)]
58 },
59 Expression::Selector(s) => s.return_value(),
60 Expression::Group(g) => g.return_value(),
61 Expression::Function(f) => f.return_value(),
62 Expression::Operator(o) => o.return_value()
63 }
64 }
65
66 pub fn as_f64(&self) -> Option<f64> {
68 if let Expression::Float(f) = self {
69 Some(*f)
70 } else {
71 None
72 }
73 }
74
75 pub fn as_str(&self) -> Option<&str> {
78 if let Expression::String(s) = self {
79 Some(s.as_str())
80 } else {
81 None
82 }
83 }
84}
85
86impl fmt::Debug for Expression {
87 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
88 if f.alternate() {
94 match self {
95 Expression::Float(val) => write!(f, "{:#?}", val),
96 Expression::String(val) => write!(f, "{:#?}", val),
97 Expression::Selector(val) => write!(f, "{:#?}", val),
98 Expression::Group(val) => write!(f, "{:#?}", val),
99 Expression::Function(val) => write!(f, "{:#?}", val),
100 Expression::Operator(val) => write!(f, "{:#?}", val),
101 }
102 } else {
103 match self {
104 Expression::Float(val) => write!(f, "{:?}", val),
105 Expression::String(val) => write!(f, "{:?}", val),
106 Expression::Selector(val) => write!(f, "{:?}", val),
107 Expression::Group(val) => write!(f, "{:?}", val),
108 Expression::Function(val) => write!(f, "{:?}", val),
109 Expression::Operator(val) => write!(f, "{:?}", val),
110 }
111 }
112 }
113}
114
115impl fmt::Display for Expression {
116 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
117 match self {
118 Expression::Float(val) => write!(f, "{}", val),
119 Expression::String(val) => write!(f, "{}", val),
120 Expression::Selector(val) => write!(f, "{}", val),
121 Expression::Group(val) => write!(f, "{}", val),
122 Expression::Function(val) => write!(f, "{}", val),
123 Expression::Operator(val) => write!(f, "{}", val),
124 }
125 }
126}
127
128pub type BExpression = Box<Expression>;