Как десериализовать число из атрибута XML с помощью serde?

Я хочу десериализовать число (например, u32) из атрибута XML.

#[macro_use]
extern crate serde_derive;
extern crate serde;
extern crate serde_xml_rs as serde_xml;


#[derive(Deserialize, Debug)]
#[serde(rename = "objects")]
pub struct Objects {
    pub foo: u32
}

fn main() {
    let result_string = r#"<?xml version="1.0" encoding="UTF-8"?>
    <objects foo="42"></objects>"#;
    let deserialized: Objects= serde_xml::deserialize(result_string.as_bytes()).expect("Parse error!");
}

Но после выполнения я получаю следующую ошибку

thread 'main' panicked at 'Parse error!: invalid type: string "42", expected u32'

Я знаю об аннотации #[serde(deserialize_with="...")], но есть ли более простой способ (например, использовать serde_xml_rs ящик)?


person chabapok    schedule 28.06.2018    source источник
comment
Без атрибута вам нужно было бы выразить типы в какой-то схеме. Но, к сожалению, serde_xml_rs не поддерживает схему или DTD.   -  person Peter Hall    schedule 28.06.2018
comment
Может быть Option<u32> подойдет для обработки нечисловых случаев   -  person user25064    schedule 28.06.2018
comment
stackoverflow.com/questions/27043268 / Почему бы просто не добавить str :: parse :: ‹u32› к функции десериализации?   -  person stevensonmt    schedule 28.06.2018


Ответы (1)


Не используйте 0.2.1. Добавьте в Cargo.toml:

serde-xml-rs = { git= "https://github.com/RReverser/serde-xml-rs.git"}

Использование serde-xml-rs от мастера решает эту проблему.

person chabapok    schedule 30.08.2018