实施 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)
我想知道如何将 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)