首页 > 解决方案 > 如何处理实现 fmt::Display 的错误?

问题描述

我想知道如何将fmt::Error, 轨道上可能出现的其他类型的临时错误正确转换fn fmtfmt::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::Errorfmt::Error符合返回的fmt::Result特征。

标签: error-handlingrust

解决方案


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

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

推荐阅读