Skip to content

Commit 6ac789d

Browse files
RCasattarjzak
authored andcommitted
tests: deserialize_byte with data greater than 4k
1 parent 5ef73e3 commit 6ac789d

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

ciborium/tests/codec.rs

+40
Original file line numberDiff line numberDiff line change
@@ -436,3 +436,43 @@ fn handle_struct_field_names(input: &str, expected: Foo) {
436436
let read = from_reader(&buf[..]).unwrap();
437437
assert_eq!(expected, read);
438438
}
439+
440+
#[test]
441+
fn deserialize_bytes_greater_than_4k() {
442+
#[derive(PartialEq, Eq, Debug)]
443+
pub struct Wrap(Vec<u8>);
444+
445+
impl Serialize for Wrap {
446+
fn serialize<S: ::serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
447+
s.serialize_bytes(&self.0[..])
448+
}
449+
}
450+
451+
impl<'de> Deserialize<'de> for Wrap {
452+
fn deserialize<D: ::serde::Deserializer<'de>>(d: D) -> Result<Wrap, D::Error> {
453+
d.deserialize_bytes(WrapVisitor {})
454+
}
455+
}
456+
457+
pub struct WrapVisitor;
458+
459+
impl<'de> serde::de::Visitor<'de> for WrapVisitor {
460+
type Value = Wrap;
461+
462+
fn expecting(&self, formatter: &mut core::fmt::Formatter) -> core::fmt::Result {
463+
formatter.write_str("oh no!")
464+
}
465+
466+
fn visit_bytes<E: serde::de::Error>(self, v: &[u8]) -> Result<Self::Value, E> {
467+
Ok(Wrap(v.to_vec()))
468+
}
469+
}
470+
471+
let a = Wrap(vec![0u8; 5000]);
472+
473+
let mut bytes = vec![];
474+
ciborium::ser::into_writer(&a, &mut bytes).unwrap();
475+
476+
let b: Wrap = ciborium::from_reader(&bytes[..]).unwrap();
477+
assert_eq!(a, b);
478+
}

0 commit comments

Comments
 (0)