Search code examples
rustdeserializationserde

How to deserialize Option<T> where T has a custom deserializer?


I want to create deserialize function for Option<T> where I already have a custom deserializer for T and I want to use that deserializer for T, when deserializing Option<T>:

pub fn deserialize(deserializer: D) -> Result<T, D::Error>
{
    ...
}

That is null in JSON to be deserialized to None and non-null to Some(deserialize(deserializer)?).

How to define:

pub fn deserialize(deserializer: D) -> Result<Option<T>, D::Error>
{
    ... // What here?
}

Solution

  • Create type Wrap:

    struct Wrap(T);
    

    Define Deserialize for Wrap.

    Now I can define the deserialize function for T as deserializing Wrap and unwrapping the value of T.