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

How errors should be treated implementing fmt::Display?

我想知道如何将 fn fmt 轨道上可能出现的 fmt::Error 以外的其他类型的临时错误正确转换为 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| /*???*/)?)
    }
}

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

fmt::Error 没有字段。它只是一个指示器值,“不支持传输除发生错误以外的错误”(docs)。因此,如果您只返回一个没有其他消息的错误,那么将错误映射到 fmt::Error:

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