@@ -1933,108 +1933,106 @@ fn test_secrecy_08_errors() {
19331933}
19341934
19351935#[ test]
1936- fn test_set_or_list_errors ( ) {
1937- // Not a set or list
1938- {
1939- assert_type_check_error ! (
1940- & Bytes :: new( ) ,
1941- Vec <i64 >,
1942- ColumnType :: Native ( NativeType :: Float ) ,
1943- BuiltinTypeCheckErrorKind :: NotDeserializableToVec
1944- ) ;
1936+ fn test_set_or_list_general_type_errors ( ) {
1937+ assert_type_check_error ! (
1938+ & Bytes :: new( ) ,
1939+ Vec <i64 >,
1940+ ColumnType :: Native ( NativeType :: Float ) ,
1941+ BuiltinTypeCheckErrorKind :: NotDeserializableToVec
1942+ ) ;
19451943
1946- // Type check of Rust set against CQL list must fail, because it would be lossy.
1947- assert_type_check_error ! (
1948- & Bytes :: new( ) ,
1949- BTreeSet <i32 >,
1950- ColumnType :: Collection {
1951- frozen: false ,
1952- typ: CollectionType :: List ( Box :: new( ColumnType :: Native ( NativeType :: Int ) ) ) ,
1953- } ,
1954- BuiltinTypeCheckErrorKind :: SetOrListError ( SetOrListTypeCheckErrorKind :: NotSet )
1955- ) ;
1956- }
1944+ // Type check of Rust set against CQL list must fail, because it would be lossy.
1945+ assert_type_check_error ! (
1946+ & Bytes :: new( ) ,
1947+ BTreeSet <i32 >,
1948+ ColumnType :: Collection {
1949+ frozen: false ,
1950+ typ: CollectionType :: List ( Box :: new( ColumnType :: Native ( NativeType :: Int ) ) ) ,
1951+ } ,
1952+ BuiltinTypeCheckErrorKind :: SetOrListError ( SetOrListTypeCheckErrorKind :: NotSet )
1953+ ) ;
1954+ }
1955+
1956+ #[ test]
1957+ fn test_set_or_list_elem_type_errors ( ) {
1958+ let err = deserialize :: < Vec < i64 > > (
1959+ & ColumnType :: Collection {
1960+ frozen : false ,
1961+ typ : CollectionType :: List ( Box :: new ( ColumnType :: Native ( NativeType :: Varint ) ) ) ,
1962+ } ,
1963+ & Bytes :: new ( ) ,
1964+ )
1965+ . unwrap_err ( ) ;
1966+ let err = get_typeck_err ( & err) ;
1967+ assert_eq ! ( err. rust_name, std:: any:: type_name:: <Vec <i64 >>( ) ) ;
1968+ assert_eq ! (
1969+ err. cql_type,
1970+ ColumnType :: Collection {
1971+ frozen: false ,
1972+ typ: CollectionType :: List ( Box :: new( ColumnType :: Native ( NativeType :: Varint ) ) ) ,
1973+ } ,
1974+ ) ;
1975+ let BuiltinTypeCheckErrorKind :: SetOrListError (
1976+ SetOrListTypeCheckErrorKind :: ElementTypeCheckFailed ( ref err) ,
1977+ ) = err. kind
1978+ else {
1979+ panic ! ( "unexpected error kind: {}" , err. kind)
1980+ } ;
1981+ let err = get_typeck_err_inner ( err. 0 . as_ref ( ) ) ;
1982+ assert_eq ! ( err. rust_name, std:: any:: type_name:: <i64 >( ) ) ;
1983+ assert_eq ! ( err. cql_type, ColumnType :: Native ( NativeType :: Varint ) ) ;
1984+ assert_matches ! (
1985+ err. kind,
1986+ BuiltinTypeCheckErrorKind :: MismatchedType {
1987+ expected: & [ ColumnType :: Native ( NativeType :: BigInt ) ]
1988+ }
1989+ ) ;
1990+ }
1991+
1992+ #[ test]
1993+ fn test_set_or_list_elem_deser_errors ( ) {
1994+ let ser_typ = ColumnType :: Collection {
1995+ frozen : false ,
1996+ typ : CollectionType :: List ( Box :: new ( ColumnType :: Native ( NativeType :: Int ) ) ) ,
1997+ } ;
1998+ let v = vec ! [ 123_i32 ] ;
1999+ let bytes = serialize ( & ser_typ, & v) ;
19572000
1958- // Bad element type
19592001 {
19602002 let err = deserialize :: < Vec < i64 > > (
19612003 & ColumnType :: Collection {
19622004 frozen : false ,
1963- typ : CollectionType :: List ( Box :: new ( ColumnType :: Native ( NativeType :: Varint ) ) ) ,
2005+ typ : CollectionType :: List ( Box :: new ( ColumnType :: Native ( NativeType :: BigInt ) ) ) ,
19642006 } ,
1965- & Bytes :: new ( ) ,
2007+ & bytes ,
19662008 )
19672009 . unwrap_err ( ) ;
1968- let err = get_typeck_err ( & err) ;
2010+ let err = get_deser_err ( & err) ;
19692011 assert_eq ! ( err. rust_name, std:: any:: type_name:: <Vec <i64 >>( ) ) ;
19702012 assert_eq ! (
19712013 err. cql_type,
19722014 ColumnType :: Collection {
19732015 frozen: false ,
1974- typ: CollectionType :: List ( Box :: new( ColumnType :: Native ( NativeType :: Varint ) ) ) ,
2016+ typ: CollectionType :: List ( Box :: new( ColumnType :: Native ( NativeType :: BigInt ) ) ) ,
19752017 } ,
19762018 ) ;
1977- let BuiltinTypeCheckErrorKind :: SetOrListError (
1978- SetOrListTypeCheckErrorKind :: ElementTypeCheckFailed ( ref err) ,
1979- ) = err. kind
2019+ let BuiltinDeserializationErrorKind :: SetOrListError (
2020+ SetOrListDeserializationErrorKind :: ElementDeserializationFailed ( err) ,
2021+ ) = & err. kind
19802022 else {
19812023 panic ! ( "unexpected error kind: {}" , err. kind)
19822024 } ;
1983- let err = get_typeck_err_inner ( err. 0 . as_ref ( ) ) ;
2025+ let err = get_deser_err ( err) ;
19842026 assert_eq ! ( err. rust_name, std:: any:: type_name:: <i64 >( ) ) ;
1985- assert_eq ! ( err. cql_type, ColumnType :: Native ( NativeType :: Varint ) ) ;
2027+ assert_eq ! ( err. cql_type, ColumnType :: Native ( NativeType :: BigInt ) ) ;
19862028 assert_matches ! (
19872029 err. kind,
1988- BuiltinTypeCheckErrorKind :: MismatchedType {
1989- expected: & [ ColumnType :: Native ( NativeType :: BigInt ) ]
2030+ BuiltinDeserializationErrorKind :: ByteLengthMismatch {
2031+ expected: 8 ,
2032+ got: 4
19902033 }
19912034 ) ;
19922035 }
1993-
1994- {
1995- let ser_typ = ColumnType :: Collection {
1996- frozen : false ,
1997- typ : CollectionType :: List ( Box :: new ( ColumnType :: Native ( NativeType :: Int ) ) ) ,
1998- } ;
1999- let v = vec ! [ 123_i32 ] ;
2000- let bytes = serialize ( & ser_typ, & v) ;
2001-
2002- {
2003- let err = deserialize :: < Vec < i64 > > (
2004- & ColumnType :: Collection {
2005- frozen : false ,
2006- typ : CollectionType :: List ( Box :: new ( ColumnType :: Native ( NativeType :: BigInt ) ) ) ,
2007- } ,
2008- & bytes,
2009- )
2010- . unwrap_err ( ) ;
2011- let err = get_deser_err ( & err) ;
2012- assert_eq ! ( err. rust_name, std:: any:: type_name:: <Vec <i64 >>( ) ) ;
2013- assert_eq ! (
2014- err. cql_type,
2015- ColumnType :: Collection {
2016- frozen: false ,
2017- typ: CollectionType :: List ( Box :: new( ColumnType :: Native ( NativeType :: BigInt ) ) ) ,
2018- } ,
2019- ) ;
2020- let BuiltinDeserializationErrorKind :: SetOrListError (
2021- SetOrListDeserializationErrorKind :: ElementDeserializationFailed ( err) ,
2022- ) = & err. kind
2023- else {
2024- panic ! ( "unexpected error kind: {}" , err. kind)
2025- } ;
2026- let err = get_deser_err ( err) ;
2027- assert_eq ! ( err. rust_name, std:: any:: type_name:: <i64 >( ) ) ;
2028- assert_eq ! ( err. cql_type, ColumnType :: Native ( NativeType :: BigInt ) ) ;
2029- assert_matches ! (
2030- err. kind,
2031- BuiltinDeserializationErrorKind :: ByteLengthMismatch {
2032- expected: 8 ,
2033- got: 4
2034- }
2035- ) ;
2036- }
2037- }
20382036}
20392037
20402038#[ test]
0 commit comments