1use super::Expression;
2use serde::Deserialize;
3
4#[doc(inline)]
6pub use hcl_primitives::expr::{BinaryOperator, UnaryOperator};
7
8#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
10pub enum Operation {
11 Unary(UnaryOp),
13 Binary(BinaryOp),
15}
16
17impl From<UnaryOp> for Operation {
18 fn from(op: UnaryOp) -> Self {
19 Operation::Unary(op)
20 }
21}
22
23impl From<BinaryOp> for Operation {
24 fn from(op: BinaryOp) -> Self {
25 Operation::Binary(op)
26 }
27}
28
29#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
31pub struct UnaryOp {
32 pub operator: UnaryOperator,
34 pub expr: Expression,
36}
37
38impl UnaryOp {
39 pub fn new<T>(operator: UnaryOperator, expr: T) -> UnaryOp
41 where
42 T: Into<Expression>,
43 {
44 UnaryOp {
45 operator,
46 expr: expr.into(),
47 }
48 }
49}
50
51#[derive(Deserialize, Debug, PartialEq, Eq, Clone)]
53pub struct BinaryOp {
54 pub lhs_expr: Expression,
56 pub operator: BinaryOperator,
58 pub rhs_expr: Expression,
60}
61
62impl BinaryOp {
63 pub fn new<L, R>(lhs_expr: L, operator: BinaryOperator, rhs_expr: R) -> BinaryOp
65 where
66 L: Into<Expression>,
67 R: Into<Expression>,
68 {
69 BinaryOp {
70 lhs_expr: lhs_expr.into(),
71 operator,
72 rhs_expr: rhs_expr.into(),
73 }
74 }
75}