anvil_zksync_traces/format/
mod.rs

1pub 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}