@@ -2035,25 +2035,54 @@ fn test_set_or_list_elem_deser_errors() {
2035
2035
} ;
2036
2036
let v = vec ! [ 123_i32 ] ;
2037
2037
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
+ }
2038
2071
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.
2039
2077
{
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 ( ) ;
2048
2080
let err = get_deser_err ( & err) ;
2049
- assert_eq ! ( err. rust_name, std:: any:: type_name:: <Vec <i64 >>( ) ) ;
2050
2081
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 >>( )
2056
2084
) ;
2085
+ assert_eq ! ( err. cql_type, deser_type) ;
2057
2086
let BuiltinDeserializationErrorKind :: SetOrListError (
2058
2087
SetOrListDeserializationErrorKind :: ElementDeserializationFailed ( err) ,
2059
2088
) = & err. kind
0 commit comments