serde
serde copied to clipboard
Document how to implement Deserialize without implementing Visitor
The Visitor documentation is featured too prominently right now. Implementing Deserialize without a Visitor is maybe even more common.
impl<'de> Deserialize<'de> for Something {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let helper = Helper::deserialize(deserializer)?;
Ok(Something::new(helper.a, helper.b))
}
}
For anyone stumbling on this issue, you can do the following without any complaints from rustc:
impl <'de> Deserialize<'de> for MyType {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de> {
let field0 = u32::deserialize(deserializer)?;
let field1 = u32::deserialize(deserializer)?;
Ok(/* ... */)
}
}
The key is calling u32::deserialize.