serde-xml-rs десерализует u8 работает, но не u16

Я пытаюсь десериализовать XML-документ в пользовательский класс ржавчины. Прикрепленный код является самой простой формой моей проблемы. При попытке десериализации числового значения любого типа, кроме u8, указывается ошибка 'main' в панике ' Result::unwrap() на Err значение: недопустимый тип: строка "99", ожидаемый u16'или любой другой требуемый тип. serde_xml_rs, кажется, приводит значение строки к правильному числовому значению для u8, но не для других типов. Я делаю что-то неправильно?

#[macro_use]
extern crate serde_derive;

extern crate serde;
extern crate serde_xml_rs;

fn main() {
    weird_example();
}



#[derive(Deserialize, Debug)]
struct SampleStruct {
    name: String,
    num_u8: u8,
    num_u16: u16,
}

fn weird_example (){
    let deser: SampleStruct = serde_xml_rs::deserialize(r##"
        <?xml version="1.0" encoding="utf-8"?>
        <sample_struct name="Sample" num_u8="99" num_u16="99">
        </sample_struct>
    "##.as_bytes()).unwrap();
    println!("{:#?}", deser);
}

1 ответ

Решение

Этот ящик не очень активен; Это известная ошибка, которая была исправлена, но не опубликована. Вы можете использовать основную ветку напрямую:

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

А также заменить serde_xml_rs::deserialize от serde_xml_rs::from_reader,


0.3.0 просто выходи!

Таким образом, вы можете использовать классический:

serde-xml-rs = "0.3"
Другие вопросы по тегам