Open
Description
Using the following code:
use serde;
use quick_xml;
#[derive(serde::Serialize, serde::Deserialize)]
pub struct Player {
spawn_forced: Option<bool>
}
fn main() {
let data = Player {
spawn_forced: None,
};
let mut deserialize_buffer = String::new();
quick_xml::se::to_writer(&mut deserialize_buffer, &data).unwrap();
println!("{}", &deserialize_buffer);
quick_xml::de::from_reader::<&[u8], Player>(&deserialize_buffer.as_bytes())
.unwrap();
}
The code crashes during the deserialize step
[dalley@thinkpad playground]$ cargo run
Compiling playground v0.1.0 (/home/dalley/Devel/practice/playground)
Finished dev [unoptimized + debuginfo] target(s) in 0.28s
Running `target/debug/playground`
<Player><spawn_forced/></Player>
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: InvalidBoolean("")', src/main.rs:98:22
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
If instead spawn_forced
is set to Some(true)
or Some(false)
, it works fine. Only None
, which serializes to <spawn_forced/>
, panics upon deserialization.
[dalley@thinkpad playground]$ cargo run
Compiling playground v0.1.0 (/home/dalley/Devel/practice/playground)
Finished dev [unoptimized + debuginfo] target(s) in 0.44s
Running `target/debug/playground`
<Player><spawn_forced>true</spawn_forced></Player>
[dalley@thinkpad playground]$ cargo run
Compiling playground v0.1.0 (/home/dalley/Devel/practice/playground)
Finished dev [unoptimized + debuginfo] target(s) in 0.28s
Running `target/debug/playground`
<Player><spawn_forced>false</spawn_forced></Player>
Activity