serde
serde copied to clipboard
Include Struct Name in Error Message?
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`")