Falha ao analisar XML com um elemento opcional com serde-xml-rs
Eu tenho uma árvore de estruturas anotadas por serde e ela consegue analisar o XML de exemplo, incluindo este fragmento:
<bmsg>
<cmsg>
<!-- ... -->
<cmsg>
<bmsg>
Agora estou testando com um grande arquivo XML de amostra e as seguintes estruturas falham porque às vezes<cmsg>..</cmsg>
está desaparecido. Eu estava desserializando isso usando:
#[derive(Serialize,Deserialize, Debug)]
struct A {
#[serde(rename="bmsg")]
messages: B, // <====
}
#[derive(Serialize,Deserialize, Debug)]
struct B { // bmsg
#[serde(rename="cmsg")]
list: Vec<C>,
}
O que resultou em um erro na segunda estrutura:
panicked at 'called `Result::unwrap()` on an `Err` value: missing field `cmsg`
Eu mudei a primeira estrutura para ter umVec<>
para que ele possa lidar com um elemento opcional:
#[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>,
}
Mas serde continua a dar o mesmo erro. eu tenteiOption<>
também, mas não chegou a lugar nenhum.
O que mais me deixa perplexo é que eu usoVec<>
em todo o lugar e nunca tive esse problema.