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

dro*_*te7 4 error-handling rust

fmt::Error我想知道如何将, 轨道上可能出现的其他类型的临时错误正确转换fn fmt为该fmt::Error类型?

比方说:

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| /*???*/)?)
    }
}
Run Code Online (Sandbox Code Playgroud)

如上面的示例所示,我想知道我应该如何转换,例如,serde_json::Errorfmt::Error符合返回的fmt::Result特征。

Apl*_*123 5

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

foo.map_err(|_| fmt::Error)
Run Code Online (Sandbox Code Playgroud)