@@ -332,11 +332,15 @@ impl<'de, 'a, R: BufRead> de::Deserializer<'de> for &'a mut Deserializer<R> {
332
332
}
333
333
334
334
fn deserialize_bytes < V : de:: Visitor < ' de > > ( self , visitor : V ) -> Result < V :: Value , DeError > {
335
- self . deserialize_string ( visitor)
335
+ let text = self . next_text ( ) ?;
336
+ let value = text. escaped ( ) ;
337
+ visitor. visit_bytes ( value)
336
338
}
337
339
338
340
fn deserialize_byte_buf < V : de:: Visitor < ' de > > ( self , visitor : V ) -> Result < V :: Value , DeError > {
339
- self . deserialize_string ( visitor)
341
+ let text = self . next_text ( ) ?;
342
+ let value = text. into_inner ( ) . into_owned ( ) ;
343
+ visitor. visit_byte_buf ( value)
340
344
}
341
345
342
346
fn deserialize_unit < V : de:: Visitor < ' de > > ( self , visitor : V ) -> Result < V :: Value , DeError > {
@@ -566,4 +570,45 @@ mod tests {
566
570
}
567
571
) ;
568
572
}
573
+
574
+ #[ test]
575
+ fn deserialize_bytes ( ) {
576
+ #[ derive( Debug , PartialEq ) ]
577
+ struct Item {
578
+ bytes : Vec < u8 > ,
579
+ }
580
+
581
+ impl < ' de > Deserialize < ' de > for Item {
582
+ fn deserialize < D > ( d : D ) -> Result < Self , D :: Error >
583
+ where
584
+ D : serde:: de:: Deserializer < ' de > ,
585
+ {
586
+ struct ItemVisitor ;
587
+
588
+ impl < ' de > de:: Visitor < ' de > for ItemVisitor {
589
+ type Value = Item ;
590
+
591
+ fn expecting ( & self , fmt : & mut std:: fmt:: Formatter ) -> std:: fmt:: Result {
592
+ fmt. write_str ( "byte data" )
593
+ }
594
+
595
+ fn visit_byte_buf < E : de:: Error > ( self , v : Vec < u8 > ) -> Result < Self :: Value , E > {
596
+ Ok ( Item { bytes : v } )
597
+ }
598
+ }
599
+
600
+ Ok ( d. deserialize_byte_buf ( ItemVisitor ) ?)
601
+ }
602
+ }
603
+
604
+ let s = r#"<item>bytes</item>"# ;
605
+ let item: Item = from_reader ( s. as_bytes ( ) ) . unwrap ( ) ;
606
+
607
+ assert_eq ! (
608
+ item,
609
+ Item {
610
+ bytes: "bytes" . as_bytes( ) . to_vec( ) ,
611
+ }
612
+ ) ;
613
+ }
569
614
}
0 commit comments