Skip to main content

oxilean_codegen/solidity_backend/
solidityexpr_traits.rs

1//! # SolidityExpr - Trait Implementations
2//!
3//! This module contains trait implementations for `SolidityExpr`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Display`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use super::types::SolidityExpr;
12use std::fmt;
13
14impl fmt::Display for SolidityExpr {
15    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16        match self {
17            SolidityExpr::IntLit(n) => write!(f, "{}", n),
18            SolidityExpr::BoolLit(b) => write!(f, "{}", b),
19            SolidityExpr::StrLit(s) => write!(f, "\"{}\"", s),
20            SolidityExpr::AddressLit(a) => write!(f, "{}", a),
21            SolidityExpr::HexLit(h) => write!(f, "{}", h),
22            SolidityExpr::Var(v) => write!(f, "{}", v),
23            SolidityExpr::This => write!(f, "this"),
24            SolidityExpr::MsgSender => write!(f, "msg.sender"),
25            SolidityExpr::MsgValue => write!(f, "msg.value"),
26            SolidityExpr::MsgData => write!(f, "msg.data"),
27            SolidityExpr::BlockTimestamp => write!(f, "block.timestamp"),
28            SolidityExpr::BlockNumber => write!(f, "block.number"),
29            SolidityExpr::BlockBasefee => write!(f, "block.basefee"),
30            SolidityExpr::TxOrigin => write!(f, "tx.origin"),
31            SolidityExpr::GasLeft => write!(f, "gasleft()"),
32            SolidityExpr::FieldAccess(e, field) => write!(f, "{}.{}", e, field),
33            SolidityExpr::Index(e, idx) => write!(f, "{}[{}]", e, idx),
34            SolidityExpr::Call(func, args) => {
35                write!(f, "{}(", func)?;
36                for (i, a) in args.iter().enumerate() {
37                    if i > 0 {
38                        write!(f, ", ")?;
39                    }
40                    write!(f, "{}", a)?;
41                }
42                write!(f, ")")
43            }
44            SolidityExpr::NamedCall(func, args) => {
45                write!(f, "{}({{", func)?;
46                for (i, (k, v)) in args.iter().enumerate() {
47                    if i > 0 {
48                        write!(f, ", ")?;
49                    }
50                    write!(f, "{}: {}", k, v)?;
51                }
52                write!(f, "}})")
53            }
54            SolidityExpr::Cast(ty, expr) => write!(f, "{}({})", ty, expr),
55            SolidityExpr::AbiEncode(args) => {
56                write!(f, "abi.encode(")?;
57                for (i, a) in args.iter().enumerate() {
58                    if i > 0 {
59                        write!(f, ", ")?;
60                    }
61                    write!(f, "{}", a)?;
62                }
63                write!(f, ")")
64            }
65            SolidityExpr::AbiEncodePacked(args) => {
66                write!(f, "abi.encodePacked(")?;
67                for (i, a) in args.iter().enumerate() {
68                    if i > 0 {
69                        write!(f, ", ")?;
70                    }
71                    write!(f, "{}", a)?;
72                }
73                write!(f, ")")
74            }
75            SolidityExpr::AbiEncodeWithSelector(sel, args) => {
76                write!(f, "abi.encodeWithSelector({}", sel)?;
77                for a in args.iter() {
78                    write!(f, ", {}", a)?;
79                }
80                write!(f, ")")
81            }
82            SolidityExpr::Keccak256(data) => write!(f, "keccak256({})", data),
83            SolidityExpr::Sha256(data) => write!(f, "sha256({})", data),
84            SolidityExpr::Ecrecover(h, v, r, s) => {
85                write!(f, "ecrecover({}, {}, {}, {})", h, v, r, s)
86            }
87            SolidityExpr::BinOp(op, lhs, rhs) => write!(f, "({} {} {})", lhs, op, rhs),
88            SolidityExpr::UnaryOp(op, expr) => write!(f, "{}({})", op, expr),
89            SolidityExpr::Ternary(cond, then_, else_) => {
90                write!(f, "({} ? {} : {})", cond, then_, else_)
91            }
92            SolidityExpr::New(ty, args) => {
93                write!(f, "new {}(", ty)?;
94                for (i, a) in args.iter().enumerate() {
95                    if i > 0 {
96                        write!(f, ", ")?;
97                    }
98                    write!(f, "{}", a)?;
99                }
100                write!(f, ")")
101            }
102            SolidityExpr::Delete(expr) => write!(f, "delete {}", expr),
103            SolidityExpr::ArrayLit(elems) => {
104                write!(f, "[")?;
105                for (i, e) in elems.iter().enumerate() {
106                    if i > 0 {
107                        write!(f, ", ")?;
108                    }
109                    write!(f, "{}", e)?;
110                }
111                write!(f, "]")
112            }
113            SolidityExpr::TupleLit(elems) => {
114                write!(f, "(")?;
115                for (i, e) in elems.iter().enumerate() {
116                    if i > 0 {
117                        write!(f, ", ")?;
118                    }
119                    write!(f, "{}", e)?;
120                }
121                write!(f, ")")
122            }
123            SolidityExpr::TypeMax(ty) => write!(f, "type({}).max", ty),
124            SolidityExpr::TypeMin(ty) => write!(f, "type({}).min", ty),
125            SolidityExpr::Payable(addr) => write!(f, "payable({})", addr),
126        }
127    }
128}