pub fn peel_one_ref(type_name: &str) -> &str {
if let Some(rest) = type_name.strip_prefix('&') {
rest.trim_start()
} else {
type_name
}
}
#[macro_export]
macro_rules! dbg_type {
($val:expr) => {{
let r = &$val;
let ty_full = std::any::type_name_of_val(r);
let ty_one = $crate::dev::peel_one_ref(ty_full);
eprintln!(
"[{}:{}] {} = {:?} (type: {})",
file!(),
line!(),
stringify!($val),
r,
ty_one
);
}};
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_peel_one_ref() {
assert_eq!(peel_one_ref("&i32"), "i32");
assert_eq!(peel_one_ref("&mut i32"), "mut i32");
assert_eq!(peel_one_ref("&&i32"), "&i32");
assert_eq!(peel_one_ref("i32"), "i32");
assert_eq!(peel_one_ref("&std::vec::Vec<i32>"), "std::vec::Vec<i32>");
}
}