Rust中如何Pretty print结构体与任意数据类型
Rust 实现结构体/任意类型美观打印(Pretty Print)的零手动开发方案
日常Rust开发做调试打印时,普遍会遇到这类痛点:
- 想要输出层级清晰、带缩进的美观格式化内容,手动给每个结构体写
Debugtrait实现太繁琐 - 嵌套数组、多层嵌套结构体用默认的
{:?}格式打印会挤成一团,可读性极差 - 需要开箱即用、不需要逐一定制打印逻辑的通用方案
目前最便捷的可选方案是使用pretty-trait库,它内置了绝大多数常用类型的默认美观打印实现,自定义结构体也能直接派生使用,不需要手写额外的打印逻辑。
使用方法
- 先在项目
Cargo.toml里引入依赖,版本可选用crates.io上发布的最新正式版,如果需要给自定义结构体派生打印实现,记得开启derive特性:
[dependencies] pretty-trait = { version = "0.3", features = ["derive"] }
- 代码中引入对应的
trait,自定义结构体加上派生宏,就可以直接调用打印方法:
use pretty_trait::Pretty; // 自定义结构体只需要派生,不需要写任何打印相关逻辑 #[derive(Pretty, Default)] struct UserInfo { uid: u64, username: String, roles: Vec<String>, profile: UserProfile, } #[derive(Pretty, Default)] struct UserProfile { age: u8, is_verified: bool, register_timestamp: i64, } fn main() { let test_user = UserInfo::default(); // 直接调用方法即可输出带缩进、层级分明的格式化内容 test_user.pretty_print(); }
如果有特殊的字段隐藏、格式定制需求,也可以手动给类型实现
Prettytrait做自定义调整,默认实现已经能覆盖绝大多数日常调试打印的场景。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

