1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
//! # dbg_hex
//! display dbg result in hexadecimal `{:#x?}` format.
//!
//! # usage
//! Replace `dbg!()` with `dbg_hex!()`
//!
//! # example
//! ```rust, no_run
//! use dbg_hex::dbg_hex;
//! dbg_hex!(0x16 + 0x16);
//! ```
//!
//! output
//! ```text
//! [src/lib.rs:38] 0x16 + 0x16 = 0x2c
//! ```
#[macro_export]
macro_rules! dbg_hex {
// NOTE: We cannot use `concat!` to make a static string as a format argument
// of `eprintln!` because `file!` could contain a `{` or
// `$val` expression could be a block (`{ .. }`), in which case the `eprintln!`
// will be malformed.
() => {
eprintln!("[{}:{}:{}]", file!(), line!(), column!());
};
($val:expr $(,)?) => {
// Use of `match` here is intentional because it affects the lifetimes
// of temporaries - https://stackoverflow.com/a/48732525/1063961
match $val {
tmp => {
eprintln!("[{}:{}:{}] {} = {:#x?}",
file!(), line!(), column!(), stringify!($val), &tmp);
tmp
}
}
};
($($val:expr),+ $(,)?) => {
($($crate::dbg_hex!($val)),+,)
};
}
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
dbg_hex!(0x16 + 0x16);
}
#[test]
fn it_works_multiple() {
dbg_hex!(0x16 + 0x16, 0x32 - 0x16);
}
}