serde-xml-rs десерализует u8 работает, но не u16 - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь десериализовать 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 Ответ

0 голосов
/ 05 января 2019

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

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"
...