I have a tree of serde-annotated structs and it succeeds in parsing the sample XML, including this fragment:
It would appear Option<T>
means that the item does exist, it just is void of content.
The documentation seems to suggest using the default
attribute, to tell the deserializer to use the implementation of the Default trait for the type if it cannot be found.
With that in mind, perhaps this would work for you:
#[derive(Serialize,Deserialize, Debug)]
struct A {
#[serde(rename = "bmsg")]
messages: B,
}
#[derive(Serialize,Deserialize, Debug)]
struct B { // bmsg
#[serde(rename = "cmsg", default)] // <----- use default to call `Default::default()` against this vector
list: Vec<C>,
}
You can find the code I used to check this in the Playground. It won't run in the Playground, but it produces your expected results running locally.