我在查看the missing_field
function来源时遇到了Serde:
/// Report that the struct has a field that wasn't deserialized
fn missing_field<V>(&mut self, field: &'static str) -> Result<V, Self::Error>
where V: Deserialize,
{
Err(Error::missing_field(field))
}
为什么这有用?为什么返回Result
,如果它将无条件地Err
?
答案 0 :(得分:5)
因为您没有包含该函数的上下文:
pub trait MapVisitor {
// ...
fn missing_field<V>(&mut self, field: &'static str) -> Result<V, Self::Error>
where V: Deserialize,
{
Err(Error::missing_field(field))
}
}
这是default trait method。实现此特征的每个类型都将免费获得此方法,如果它们没有做任何特殊操作,但可以选择重新实现它。据推测,大多数实现都不会实现该方法,但它也可能只是一个理智的默认值。
答案 1 :(得分:1)
正如@Shepmaster回答的那样,这只是数据格式的默认值,其中缺少的字段始终是错误。
有些数据格式中缺少的字段并不总是错误。 JSON是一个常见的例子。结构如下:
TextView
可以从JSON字符串newInstance()
反序列化,其中字段&#34; b&#34;不见了。 JSON的Serde Deserializer将缺少的Option字段定义为#[derive(Deserialize)]
struct S {
a: i32,
b: Option<i32>,
}
。