dlhn
dlhn copied to clipboard
String > 128 bytes fails to roundtrip
dlhn = "0.1.6"
serde = "1.0"
fn main() {
use serde::{Serialize, Deserialize};
let original = " ".repeat(129);
let mut serialized = vec![];
original.serialize(&mut dlhn::Serializer::new(&mut serialized)).unwrap();
let deserialized = String::deserialize(&mut dlhn::Deserializer::new(&mut serialized.as_slice())).unwrap();
assert_eq!(original, deserialized);
}
The string gets serialized with all 129 bytes, but only 128 bytes are deserialized causing the assert_eq to fail. This is caused by #13. A possible fix for deserializing String and Vec<u8> that wouldn't break #11:
fn main() -> std::io::Result<()> {
use std::io::{self, Read};
let reader: &mut dyn Read = &mut [b' '; 100].as_slice();
let len = 10;
let mut s = String::new();
if reader.take(len as u64).read_to_string(&mut s)? != len {
return Err(io::Error::new(io::ErrorKind::UnexpectedEof, ""));
};
assert_eq!(s, " ".repeat(len));
let mut v = Vec::new();
if reader.take(len as u64).read_to_end(&mut v)? != len {
return Err(io::Error::new(io::ErrorKind::UnexpectedEof, ""));
};
assert_eq!(v, vec![b' '; len]);
Ok(())
}