@@ -79,14 +79,16 @@ where
7979 T : DeserializeValue < ' frame , ' metadata > ,
8080{
8181 fn type_check ( typ : & ColumnType ) -> Result < ( ) , TypeCheckError > {
82- T :: type_check ( typ)
82+ T :: type_check ( typ) . map_err ( typck_error_replace_rust_name :: < Self > )
8383 }
8484
8585 fn deserialize (
8686 typ : & ' metadata ColumnType < ' metadata > ,
8787 v : Option < FrameSlice < ' frame > > ,
8888 ) -> Result < Self , DeserializationError > {
89- v. map ( |_| T :: deserialize ( typ, v) ) . transpose ( )
89+ v. map ( |_| T :: deserialize ( typ, v) )
90+ . transpose ( )
91+ . map_err ( deser_error_replace_rust_name :: < Self > )
9092 }
9193}
9294
@@ -118,6 +120,7 @@ where
118120 #[ inline]
119121 fn type_check ( typ : & ColumnType ) -> Result < ( ) , TypeCheckError > {
120122 <T as DeserializeValue < ' frame , ' metadata > >:: type_check ( typ)
123+ . map_err ( typck_error_replace_rust_name :: < Self > )
121124 }
122125
123126 fn deserialize (
@@ -128,7 +131,8 @@ where
128131 if val. is_empty ( ) {
129132 Ok ( MaybeEmpty :: Empty )
130133 } else {
131- let v = <T as DeserializeValue < ' frame , ' metadata > >:: deserialize ( typ, v) ?;
134+ let v = <T as DeserializeValue < ' frame , ' metadata > >:: deserialize ( typ, v)
135+ . map_err ( deser_error_replace_rust_name :: < Self > ) ?;
132136 Ok ( MaybeEmpty :: Value ( v) )
133137 }
134138 }
@@ -662,13 +666,16 @@ where
662666{
663667 fn type_check ( typ : & ColumnType ) -> Result < ( ) , TypeCheckError > {
664668 <T as DeserializeValue < ' frame , ' metadata > >:: type_check ( typ)
669+ . map_err ( typck_error_replace_rust_name :: < Self > )
665670 }
666671
667672 fn deserialize (
668673 typ : & ' metadata ColumnType < ' metadata > ,
669674 v : Option < FrameSlice < ' frame > > ,
670675 ) -> Result < Self , DeserializationError > {
671- <T as DeserializeValue < ' frame , ' metadata > >:: deserialize ( typ, v) . map ( secrecy_08:: Secret :: new)
676+ <T as DeserializeValue < ' frame , ' metadata > >:: deserialize ( typ, v)
677+ . map ( secrecy_08:: Secret :: new)
678+ . map_err ( deser_error_replace_rust_name :: < Self > )
672679 }
673680}
674681
@@ -691,6 +698,7 @@ make_error_replace_rust_name!(
691698// lists and sets
692699
693700/// An iterator over either a CQL set or list.
701+ #[ derive( Debug , Clone ) ]
694702pub struct ListlikeIterator < ' frame , ' metadata , T > {
695703 coll_typ : & ' metadata ColumnType < ' metadata > ,
696704 elem_typ : & ' metadata ColumnType < ' metadata > ,
@@ -873,8 +881,8 @@ where
873881 match typ {
874882 ColumnType :: Collection {
875883 frozen : false ,
876- typ : CollectionType :: Set ( el_t ) ,
877- } => < T as DeserializeValue < ' frame , ' metadata > > :: type_check ( el_t )
884+ typ : CollectionType :: Set ( _ ) ,
885+ } => ListlikeIterator :: < ' frame , ' metadata , T > :: type_check ( typ )
878886 . map_err ( typck_error_replace_rust_name :: < Self > ) ,
879887 _ => Err ( mk_typck_err :: < Self > (
880888 typ,
@@ -904,8 +912,8 @@ where
904912 match typ {
905913 ColumnType :: Collection {
906914 frozen : false ,
907- typ : CollectionType :: Set ( el_t ) ,
908- } => < T as DeserializeValue < ' frame , ' metadata > > :: type_check ( el_t )
915+ typ : CollectionType :: Set ( _ ) ,
916+ } => ListlikeIterator :: < ' frame , ' metadata , T > :: type_check ( typ )
909917 . map_err ( typck_error_replace_rust_name :: < Self > ) ,
910918 _ => Err ( mk_typck_err :: < Self > (
911919 typ,
@@ -943,6 +951,7 @@ where
943951/// It would be nice to have a rule to determine if the element type is fixed-length or not,
944952/// however, we only have a heuristic. There are a few types that should, for all intents and purposes,
945953/// be considered fixed-length, but are not, e.g TinyInt. See ColumnType::type_size() for the list.
954+ #[ derive( Debug , Clone ) ]
946955pub struct VectorIterator < ' frame , ' metadata , T > {
947956 collection_type : & ' metadata ColumnType < ' metadata > ,
948957 element_type : & ' metadata ColumnType < ' metadata > ,
@@ -1101,6 +1110,7 @@ where
11011110}
11021111
11031112/// An iterator over a CQL map.
1113+ #[ derive( Debug , Clone ) ]
11041114pub struct MapIterator < ' frame , ' metadata , K , V > {
11051115 coll_typ : & ' metadata ColumnType < ' metadata > ,
11061116 k_typ : & ' metadata ColumnType < ' metadata > ,
@@ -1416,6 +1426,7 @@ impl_tuple_multiple!(
14161426/// - `None` - missing from the serialized form
14171427/// - `Some(None)` - present, but null
14181428/// - `Some(Some(...))` - non-null, present value
1429+ #[ derive( Debug , Clone ) ]
14191430pub struct UdtIterator < ' frame , ' metadata > {
14201431 all_fields : & ' metadata [ ( Cow < ' metadata , str > , ColumnType < ' metadata > ) ] ,
14211432 type_name : & ' metadata str ,
@@ -1990,7 +2001,7 @@ impl Display for UdtTypeCheckErrorKind {
19902001}
19912002
19922003/// Deserialization of one of the built-in types failed.
1993- #[ derive( Debug , Error ) ]
2004+ #[ derive( Debug , Error , Clone ) ]
19942005#[ error( "Failed to deserialize Rust type {rust_name} from CQL type {cql_type:?}: {kind}" ) ]
19952006pub struct BuiltinDeserializationError {
19962007 /// Name of the Rust type being deserialized.
@@ -2025,7 +2036,7 @@ fn mk_deser_err_named(
20252036}
20262037
20272038/// Describes why deserialization of some of the built-in types failed.
2028- #[ derive( Debug ) ]
2039+ #[ derive( Debug , Clone ) ]
20292040#[ non_exhaustive]
20302041pub enum BuiltinDeserializationErrorKind {
20312042 /// Failed to deserialize one of date's fields.
@@ -2118,7 +2129,7 @@ impl Display for BuiltinDeserializationErrorKind {
21182129}
21192130
21202131/// Describes why deserialization of a set or list type failed.
2121- #[ derive( Debug ) ]
2132+ #[ derive( Debug , Clone ) ]
21222133#[ non_exhaustive]
21232134pub enum SetOrListDeserializationErrorKind {
21242135 /// Failed to deserialize set or list's length.
@@ -2149,7 +2160,7 @@ impl From<SetOrListDeserializationErrorKind> for BuiltinDeserializationErrorKind
21492160}
21502161
21512162/// Describes why deserialization of a vector type failed.
2152- #[ derive( Error , Debug ) ]
2163+ #[ derive( Error , Debug , Clone ) ]
21532164#[ non_exhaustive]
21542165pub enum VectorDeserializationErrorKind {
21552166 /// One of the elements of the vector failed to deserialize.
@@ -2165,7 +2176,7 @@ impl From<VectorDeserializationErrorKind> for BuiltinDeserializationErrorKind {
21652176}
21662177
21672178/// Describes why deserialization of a map type failed.
2168- #[ derive( Debug ) ]
2179+ #[ derive( Debug , Clone ) ]
21692180#[ non_exhaustive]
21702181// Check triggers because all variants end with "DeserializationFailed".
21712182// TODO(2.0): Remove the "DeserializationFailed" postfix from variants.
0 commit comments