用 Rust 类型系统表达接口状态,别把错误压成字符串
编译期能阻止多少错误,取决于接口有没有把业务约束交给类型系统。若所有输入都是String,所有失败也都是String,Rust 只能保证内存安全,无法替你区分状态。
让非法状态难以构造
为已校验标识、非空参数和不同阶段的数据建立独立类型,通过构造函数完成校验。函数只接收当前阶段允许的类型,调用方就不能跳过必要步骤。
错误枚举承担恢复语义
区分参数错误、状态冲突、依赖不可用和内部失败。调用方根据枚举决定提示、重试或终止,而不是解析文案。对外边界再把内部错误映射为稳定协议,同时避免泄露敏感上下文。
谨慎使用无法表达事实的断言
unwrap和expect适合确由程序不变量保证的情况;外部输入、文件与网络都可能失败,应显式返回。测试覆盖每个错误分支,确认资源清理与状态没有半途提交。
类型不是装饰。把状态和错误写进签名,编译器才能真正参与设计评审。