@@ -436,3 +436,43 @@ fn handle_struct_field_names(input: &str, expected: Foo) {
436
436
let read = from_reader ( & buf[ ..] ) . unwrap ( ) ;
437
437
assert_eq ! ( expected, read) ;
438
438
}
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