@@ -631,7 +631,7 @@ mod serde_ {
631
631
632
632
serde:: forward_to_deserialize_any! {
633
633
i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
634
- bytes byte_buf unit_struct newtype_struct seq tuple tuple_struct
634
+ bytes byte_buf unit_struct newtype_struct seq tuple_struct
635
635
map struct identifier ignored_any
636
636
}
637
637
@@ -669,6 +669,31 @@ mod serde_ {
669
669
}
670
670
}
671
671
672
+ fn deserialize_tuple < V > (
673
+ self ,
674
+ len : usize ,
675
+ visitor : V ,
676
+ ) -> std:: result:: Result < V :: Value , Self :: Error >
677
+ where
678
+ V : Visitor < ' de > ,
679
+ {
680
+ match self . value {
681
+ Value :: Blob ( b) => {
682
+ if len != b. len ( ) {
683
+ return Err ( de:: Error :: invalid_value (
684
+ de:: Unexpected :: Other ( & format ! ( "{:?}" , Value :: Blob ( b) ) ) ,
685
+ & "expected and provided buffers don't match in length" ,
686
+ ) ) ;
687
+ }
688
+ visitor. visit_seq ( SeqDeserializer :: new ( b. into_iter ( ) ) )
689
+ }
690
+ _ => Err ( de:: Error :: invalid_value (
691
+ de:: Unexpected :: Other ( & format ! ( "{:?}" , self . value) ) ,
692
+ & "a blob of a certain length" ,
693
+ ) ) ,
694
+ }
695
+ }
696
+
672
697
fn deserialize_any < V > ( self , visitor : V ) -> std:: result:: Result < V :: Value , Self :: Error >
673
698
where
674
699
V : Visitor < ' de > ,
@@ -815,7 +840,16 @@ mod serde_ {
815
840
assert ! ( de:: <f64 >( Value :: Blob ( b"abc" . to_vec( ) ) ) . is_err( ) ) ;
816
841
assert ! ( de:: <MyEnum >( Value :: Text ( "C" . to_string( ) ) ) . is_err( ) ) ;
817
842
818
- assert_eq ! ( de:: <[ u8 ; 2 ] >( Value :: Blob ( b"aa" . to_vec( ) ) ) , Ok ( [ 97 , 97 ] ) ) ;
843
+ assert_eq ! (
844
+ de:: <[ u8 ; 0 ] >( Value :: Blob ( b"" . to_vec( ) ) ) . unwrap( ) ,
845
+ [ ] as [ u8 ; 0 ]
846
+ ) ;
847
+ assert_eq ! (
848
+ de:: <[ u8 ; 2 ] >( Value :: Blob ( b"aa" . to_vec( ) ) ) . unwrap( ) ,
849
+ [ 97 , 97 ]
850
+ ) ;
851
+ assert ! ( de:: <[ u8 ; 2 ] >( Value :: Blob ( b"aaa" . to_vec( ) ) ) . is_err( ) ) ;
852
+ assert ! ( de:: <[ u8 ; 3 ] >( Value :: Blob ( b"aa" . to_vec( ) ) ) . is_err( ) ) ;
819
853
}
820
854
}
821
855
}
0 commit comments