I have a tree of serde-annotated structs and it succeeds in parsing the sample XML, including this fragment:
<bmsg>
<cmsg>
<!-- ... -->
<cmsg>
<bmsg>
Now I am testing with a large sample XML file and the following structs fail because sometimes <cmsg>..</cmsg> is missing. I was deserializing this using:
#[derive(Serialize,Deserialize, Debug)]
struct A {
#[serde(rename="bmsg")]
messages: B, // <====
}
#[derive(Serialize,Deserialize, Debug)]
struct B { // bmsg
#[serde(rename="cmsg")]
list: Vec<C>,
}
Which resulted in an error in the second struct:
panicked at 'called `Result::unwrap()` on an `Err` value: missing field `cmsg`
I changed the first struct to have a Vec<> so it can deal with an optional element:
#[derive(Serialize,Deserialize, Debug)]
struct A {
#[serde(rename="bmsg")]
messages: Vec<B>, // <====
}
#[derive(Serialize,Deserialize, Debug)]
struct B { // bmsg
#[serde(rename="cmsg")]
list: Vec<C>,
}
But serde continues to give the same error. I tried Option<> too, but didn't get anywhere.
What baffles me the most is that I use Vec<> all over the place and never ran into this problem.