@@ -2035,25 +2035,54 @@ fn test_set_or_list_elem_deser_errors() {
20352035 } ;
20362036 let v = vec ! [ 123_i32 ] ;
20372037 let bytes = serialize ( & ser_typ, & v) ;
2038+ let deser_type = ColumnType :: Collection {
2039+ frozen : false ,
2040+ typ : CollectionType :: Set ( Box :: new ( ColumnType :: Native ( NativeType :: BigInt ) ) ) ,
2041+ } ;
2042+
2043+ // In contrary to the test above, here we could require owned deserialization, since
2044+ // ListLikeIterator can't be tested with that function anyway. For consistency and future ease of
2045+ // editing, I used the same approach as in the previous test anyway.
2046+ fn verify_elem_deser_err < ' meta , ' frame , T : DeserializeValue < ' frame , ' meta > + Debug > (
2047+ frame : & ' frame Bytes ,
2048+ meta : & ' meta ColumnType < ' meta > ,
2049+ ) {
2050+ let err = deserialize :: < T > ( meta, frame) . unwrap_err ( ) ;
2051+ let err = get_deser_err ( & err) ;
2052+ assert_eq ! ( err. rust_name, std:: any:: type_name:: <T >( ) ) ;
2053+ assert_eq ! ( err. cql_type, * meta) ;
2054+ let BuiltinDeserializationErrorKind :: SetOrListError (
2055+ SetOrListDeserializationErrorKind :: ElementDeserializationFailed ( err) ,
2056+ ) = & err. kind
2057+ else {
2058+ panic ! ( "unexpected error kind: {}" , err. kind)
2059+ } ;
2060+ let err = get_deser_err ( err) ;
2061+ assert_eq ! ( err. rust_name, std:: any:: type_name:: <i64 >( ) ) ;
2062+ assert_eq ! ( err. cql_type, ColumnType :: Native ( NativeType :: BigInt ) ) ;
2063+ assert_matches ! (
2064+ err. kind,
2065+ BuiltinDeserializationErrorKind :: ByteLengthMismatch {
2066+ expected: 8 ,
2067+ got: 4
2068+ }
2069+ ) ;
2070+ }
20382071
2072+ verify_elem_deser_err :: < Vec < i64 > > ( & bytes, & deser_type) ;
2073+ verify_elem_deser_err :: < BTreeSet < i64 > > ( & bytes, & deser_type) ;
2074+ verify_elem_deser_err :: < HashSet < i64 > > ( & bytes, & deser_type) ;
2075+
2076+ // ListlikeIterator has to be tested separately.
20392077 {
2040- let err = deserialize :: < Vec < i64 > > (
2041- & ColumnType :: Collection {
2042- frozen : false ,
2043- typ : CollectionType :: List ( Box :: new ( ColumnType :: Native ( NativeType :: BigInt ) ) ) ,
2044- } ,
2045- & bytes,
2046- )
2047- . unwrap_err ( ) ;
2078+ let mut iterator = deserialize :: < ListlikeIterator < i64 > > ( & deser_type, & bytes) . unwrap ( ) ;
2079+ let err = iterator. next ( ) . unwrap ( ) . unwrap_err ( ) ;
20482080 let err = get_deser_err ( & err) ;
2049- assert_eq ! ( err. rust_name, std:: any:: type_name:: <Vec <i64 >>( ) ) ;
20502081 assert_eq ! (
2051- err. cql_type,
2052- ColumnType :: Collection {
2053- frozen: false ,
2054- typ: CollectionType :: List ( Box :: new( ColumnType :: Native ( NativeType :: BigInt ) ) ) ,
2055- } ,
2082+ err. rust_name,
2083+ std:: any:: type_name:: <ListlikeIterator <i64 >>( )
20562084 ) ;
2085+ assert_eq ! ( err. cql_type, deser_type) ;
20572086 let BuiltinDeserializationErrorKind :: SetOrListError (
20582087 SetOrListDeserializationErrorKind :: ElementDeserializationFailed ( err) ,
20592088 ) = & err. kind
0 commit comments