实现 fmt::Display 时如何处理错误?

4
我想知道如何正确地将除了fmt::Error之外其他类型的临时错误转换为fmt::Error类型,这些错误可能在fn fmt中出现?

比方说:

use std::fmt;
use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct MyStruct {
    x: i32
}

impl fmt::Display for MyStruct {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{}", serde_json::to_string(&self).map_err(|e| /*???*/)?)
    }
}

如上例所示,我想知道如何将例如serde_json::Error转换为fmt::Error,以符合返回的fmt::Result特质。
1个回答

5

fmt::Error没有字段。它只是一个指示值,表示“不支持传输错误,除了发生错误之外的任何错误” (文档)。因此,如果您只想返回没有其他消息的错误,则将该错误映射到fmt::Error

foo.map_err(|_| fmt::Error)

在这种情况下,我想,甚至没有办法指定,因为根据该特征,返回类型不应为“dyn”甚至是“trait”。那么确实没有办法做到这一点,是吗? - unegare
是的,没有办法通过返回值传达错误。从文档中可以看到:“任何额外的信息必须通过其他方式进行传输。” - Aplet123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接