foundry_evm_abi/console/
ds.rs

1//! DSTest log interface.
2
3use super::{format_units_int, format_units_uint};
4use alloy_primitives::hex;
5use alloy_sol_types::sol;
6use derive_more::Display;
7use foundry_common_fmt::UIfmt;
8use itertools::Itertools;
9
10// Using UIfmt for consistent and user-friendly formatting
11
12sol! {
13#[sol(abi)]
14#[derive(Display)]
15interface Console {
16    #[display("{}", val.pretty())]
17    event log(string val);
18
19    #[display("{}", hex::encode_prefixed(val))]
20    event logs(bytes val);
21
22    #[display("{}", val.pretty())]
23    event log_address(address val);
24
25    #[display("{}", val.pretty())]
26    event log_bytes32(bytes32 val);
27
28    #[display("{}", val.pretty())]
29    event log_int(int val);
30
31    #[display("{}", val.pretty())]
32    event log_uint(uint val);
33
34    #[display("{}", hex::encode_prefixed(val))]
35    event log_bytes(bytes val);
36
37    #[display("{}", val.pretty())]
38    event log_string(string val);
39
40    #[display("[{}]", val.iter().map(|v| v.pretty()).format(", "))]
41    event log_array(uint256[] val);
42
43    #[display("[{}]", val.iter().map(|v| v.pretty()).format(", "))]
44    event log_array(int256[] val);
45
46    #[display("[{}]", val.iter().map(|v| v.pretty()).format(", "))]
47    event log_array(address[] val);
48
49    #[display("{}: {}", key.pretty(), val.pretty())]
50    event log_named_address(string key, address val);
51
52    #[display("{}: {}", key.pretty(), val.pretty())]
53    event log_named_bytes32(string key, bytes32 val);
54
55    #[display("{}: {}", key.pretty(), format_units_int(val, decimals))]
56    event log_named_decimal_int(string key, int val, uint decimals);
57
58    #[display("{}: {}", key.pretty(), format_units_uint(val, decimals))]
59    event log_named_decimal_uint(string key, uint val, uint decimals);
60
61    #[display("{}: {}", key.pretty(), val.pretty())]
62    event log_named_int(string key, int val);
63
64    #[display("{}: {}", key.pretty(), val.pretty())]
65    event log_named_uint(string key, uint val);
66
67    #[display("{}: {}", key.pretty(), hex::encode_prefixed(val))]
68    event log_named_bytes(string key, bytes val);
69
70    #[display("{}: {}", key.pretty(), val.pretty())]
71    event log_named_string(string key, string val);
72
73    #[display("{}: [{}]", key.pretty(), val.iter().map(|v| v.pretty()).format(", "))]
74    event log_named_array(string key, uint256[] val);
75
76    #[display("{}: [{}]", key.pretty(), val.iter().map(|v| v.pretty()).format(", "))]
77    event log_named_array(string key, int256[] val);
78
79    #[display("{}: [{}]", key.pretty(), val.iter().map(|v| v.pretty()).format(", "))]
80    event log_named_array(string key, address[] val);
81}
82}
83
84pub use Console::*;