Rust 处理serde错误和其他错误类型?
我有以下功能Rust 处理serde错误和其他错误类型?,rust,Rust,我有以下功能导出目录 //用于处理多个错误类型 类型BoxResult=结果; fn导出目录(目录:&directory,导出路径:&str)->BoxResult{ 让mut file=OpenOptions::new().write(true).truncate(true).create(true).open(export_path)?; serde_json::to_string(dir).或_else(| err | err(Box::new(err))) } fn main(){ 让m
导出目录
//用于处理多个错误类型
类型BoxResult=结果;
fn导出目录(目录:&directory,导出路径:&str)->BoxResult{
让mut file=OpenOptions::new().write(true).truncate(true).create(true).open(export_path)?;
serde_json::to_string(dir).或_else(| err | err(Box::new(err)))
}
fn main(){
让mut dir=Directory::new();
export_目录(&dir,“export_path.json”);
}
当我编译代码时,它会给我
错误[E0308]:类型不匹配
-->src/main.rs:98:3
|
96 | fn导出目录(目录:&directory,导出路径:&str)->BoxResult{
|--------------应为'std::result::result>`
找到类型“std::result::result”`
但是在引用时,
serde_json::error::error
已经实现了error
特性。这里出了什么问题?rustc无法自动推断闭包中的框
想要成为框
或框
。您必须告诉编译器您实际上正在创建一个框trait对象而不是装箱结构
另一方面,您不能直接调用Box:::new
,因为Error
不扩展std::marker::size
但是,装箱的serde_json::Error
实际上是装箱的std::Error::Error
。因此,您可以使用as
运算符强制此转换:
result.or_else(|err| Err(Box::new(err) as Box<dyn std::error::Error>)
result.or|else(| err | err(Box::new(err)as Box)