serde icon indicating copy to clipboard operation
serde copied to clipboard

Include Struct Name in Error Message?

Open MyGodItsFull0fStars opened this issue 5 months ago • 4 comments

I use the derive[] variant of Serde to deserialize large files containing various data structures with identical value names. In this issue, I focus on the value name hidden (I included two of the structs I use in this issue).

In at least one of the data types, the hidden value does not always seem available. Hence, I must use an Optional on that specific hidden value. As I want this to be as strict as possible, I don't want to change all values to an Optional<bool> value, but only if necessary.

Now, if I try to call the from_str function, I encounter the error message:

..called `Result::unwrap()` on an `Err` value: Custom("missing field `@hidden`")
    #[derive(Debug, Deserialize, PartialEq, Eq)]
    pub struct CategoryEntry {
        #[serde(rename = "@name")]
        pub name: String,
        #[serde(rename = "@hidden")]
        pub hidden: bool,                      <-------- could fail here
        #[serde(rename = "@id")]
        pub id: String,
    }

    #[derive(Debug, Deserialize, PartialEq, Eq)]
    pub struct InfoLink {
        #[serde(rename = "@name")]
        pub name: String,
        #[serde(rename = "@hidden")]
         pub hidden: bool,                      <-------- or here?
    }

As multiple struct data types are used in the files' deserialization, I cannot pinpoint which of them the error is occurring. Is there a way to add a value similar to tags to additionally add to error messages?

For example, if the mentioned error is encountered for deserializing into a CategoryEntry struct, the message could (if possible) look like this:

..called `Result::unwrap()` on an `Err` value: CategoryEntry("missing field `@hidden`")

MyGodItsFull0fStars avatar Mar 11 '24 10:03 MyGodItsFull0fStars