anvil_zksync_traces/format/
mod.rs1pub mod numbers;
2
3use anvil_zksync_common::utils::format::write_interspersed;
4use anvil_zksync_types::{numbers::SignedU256, traces::DecodedValue};
5use numbers::PrettyNumberExponentialRepr;
6
7pub struct PrettyDecodedValue<'a>(pub &'a DecodedValue);
8
9impl std::fmt::Display for PrettyDecodedValue<'_> {
10 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11 match self.0 {
12 DecodedValue::Int(inner) => PrettyNumberExponentialRepr(&inner.clone().into()).fmt(f),
13 DecodedValue::Uint(inner) => {
14 let su256: SignedU256 = (*inner).into();
15 PrettyNumberExponentialRepr(&su256.into()).fmt(f)
16 }
17 DecodedValue::String(inner) => f.write_fmt(format_args!("{:?}", inner)),
18 DecodedValue::CustomStruct {
19 name,
20 prop_names,
21 tuple,
22 } => f.write_str(&{
23 let mut s = String::new();
24
25 s.push_str(name);
26
27 if prop_names.len() == tuple.len() {
28 s.push_str("({ ");
29
30 for (i, (prop_name, value)) in std::iter::zip(prop_names, tuple).enumerate() {
31 if i > 0 {
32 s.push_str(", ");
33 }
34 s.push_str(prop_name);
35 s.push_str(": ");
36 s.push_str(&PrettyDecodedValue(value).to_string());
37 }
38
39 s.push_str(" })");
40 } else {
41 s.push_str(
42 &tuple
43 .iter()
44 .map(|x| PrettyDecodedValue(x).to_string())
45 .collect::<Vec<_>>()
46 .join(","),
47 );
48 }
49 s
50 }),
51
52 DecodedValue::Array(vec) | DecodedValue::FixedArray(vec) => {
53 f.write_str("[")?;
54 write_interspersed(f, vec.iter().map(PrettyDecodedValue), ", ")?;
55 f.write_str("]")
56 }
57 DecodedValue::Tuple(vec) => {
58 f.write_str("(")?;
59 write_interspersed(f, vec.iter().map(PrettyDecodedValue), ", ")?;
60 f.write_str(")")
61 }
62 other => other.fmt(f),
63 }
64 }
65}