如何打印Axum请求/响应中的所有Extensions内容?
问题
用调试格式化器打印Extensions拿不到有效内容:
println!("{:?}", parts.extensions);
输出只有:
Extensions
但调用parts.extensions.len()能看到它包含6个值。我知道怎么获取特定扩展,但想调试打印所有键值对。Extensions是个以类型为键的映射,官方文档里没找到直接打印所有内容的方法。
解决办法
因为
Extensions默认的Debug实现不会遍历所有键值对,你可以手动写遍历逻辑:
直接用iter()方法遍历所有扩展项,打印每个项的类型名和对应值:for (type_id, value) in parts.extensions.iter() { let type_name = type_id.name(); println!("{}: {:?}", type_name, value); }如果是第三方库的
Extensions没法直接修改,还可以用新类型包装它,实现自定义Debugtrait,这样就能用{:?}格式化输出所有内容:use std::fmt; struct DebugWrap<'a>(&'a Extensions); impl<'a> fmt::Debug for DebugWrap<'a> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_map() .entries(self.0.iter().map(|(id, val)| (id.name(), val))) .finish() } } // 调用时这么用 println!("{:?}", DebugWrap(&parts.extensions));
内容的提问来源于stack exchange,提问作者Vitor de oliveira
相关产品推荐
相关产品推荐

