@@ -10,26 +10,29 @@ use crate::frame::response::result::{ColumnSpec, ColumnType, CqlValue, Row};
1010
1111/// Represents a raw, unparsed column value.
1212#[ non_exhaustive]
13- pub struct RawColumn < ' frame > {
13+ pub struct RawColumn < ' frame , ' metadata > {
1414 pub index : usize ,
15- pub spec : & ' frame ColumnSpec < ' frame > ,
15+ pub spec : & ' metadata ColumnSpec < ' metadata > ,
1616 pub slice : Option < FrameSlice < ' frame > > ,
1717}
1818
1919/// Iterates over columns of a single row.
2020#[ derive( Clone , Debug ) ]
21- pub struct ColumnIterator < ' frame > {
22- specs : std:: iter:: Enumerate < std:: slice:: Iter < ' frame , ColumnSpec < ' frame > > > ,
21+ pub struct ColumnIterator < ' frame , ' metadata > {
22+ specs : std:: iter:: Enumerate < std:: slice:: Iter < ' metadata , ColumnSpec < ' metadata > > > ,
2323 slice : FrameSlice < ' frame > ,
2424}
2525
26- impl < ' frame > ColumnIterator < ' frame > {
26+ impl < ' frame , ' metadata > ColumnIterator < ' frame , ' metadata > {
2727 /// Creates a new iterator over a single row.
2828 ///
2929 /// - `specs` - information about columns of the serialized response,
3030 /// - `slice` - a [FrameSlice] which points to the serialized row.
3131 #[ inline]
32- pub ( crate ) fn new ( specs : & ' frame [ ColumnSpec ] , slice : FrameSlice < ' frame > ) -> Self {
32+ pub ( crate ) fn new (
33+ specs : & ' metadata [ ColumnSpec < ' metadata > ] ,
34+ slice : FrameSlice < ' frame > ,
35+ ) -> Self {
3336 Self {
3437 specs : specs. iter ( ) . enumerate ( ) ,
3538 slice,
@@ -44,8 +47,8 @@ impl<'frame> ColumnIterator<'frame> {
4447 }
4548}
4649
47- impl < ' frame > Iterator for ColumnIterator < ' frame > {
48- type Item = Result < RawColumn < ' frame > , DeserializationError > ;
50+ impl < ' frame , ' metadata > Iterator for ColumnIterator < ' frame , ' metadata > {
51+ type Item = Result < RawColumn < ' frame , ' metadata > , DeserializationError > ;
4952
5053 #[ inline]
5154 fn next ( & mut self ) -> Option < Self :: Item > {
@@ -84,7 +87,7 @@ impl<'frame> Iterator for ColumnIterator<'frame> {
8487/// The crate also provides a derive macro which allows to automatically
8588/// implement the trait for a custom type. For more details on what the macro
8689/// is capable of, see its documentation.
87- pub trait DeserializeRow < ' frame >
90+ pub trait DeserializeRow < ' frame , ' metadata >
8891where
8992 Self : Sized ,
9093{
@@ -100,7 +103,7 @@ where
100103 /// the row's type. Note that `deserialize` is not an unsafe function,
101104 /// so it should not use the assumption about `type_check` being called
102105 /// as an excuse to run `unsafe` code.
103- fn deserialize ( row : ColumnIterator < ' frame > ) -> Result < Self , DeserializationError > ;
106+ fn deserialize ( row : ColumnIterator < ' frame , ' metadata > ) -> Result < Self , DeserializationError > ;
104107}
105108
106109// raw deserialization as ColumnIterator
@@ -111,14 +114,14 @@ where
111114// Implementing DeserializeRow for it allows us to simplify our interface. For example,
112115// we have `QueryResult::rows<T: DeserializeRow>()` - you can put T = ColumnIterator
113116// instead of having a separate rows_raw function or something like this.
114- impl < ' frame > DeserializeRow < ' frame > for ColumnIterator < ' frame > {
117+ impl < ' frame , ' metadata > DeserializeRow < ' frame , ' metadata > for ColumnIterator < ' frame , ' metadata > {
115118 #[ inline]
116119 fn type_check ( _specs : & [ ColumnSpec ] ) -> Result < ( ) , TypeCheckError > {
117120 Ok ( ( ) )
118121 }
119122
120123 #[ inline]
121- fn deserialize ( row : ColumnIterator < ' frame > ) -> Result < Self , DeserializationError > {
124+ fn deserialize ( row : ColumnIterator < ' frame , ' metadata > ) -> Result < Self , DeserializationError > {
122125 Ok ( row)
123126 }
124127}
@@ -140,15 +143,17 @@ make_error_replace_rust_name!(
140143/// While no longer encouraged (because the new framework encourages deserializing
141144/// directly into desired types, entirely bypassing [CqlValue]), this can be indispensable
142145/// for some use cases, i.e. those involving dynamic parsing (ORMs?).
143- impl < ' frame > DeserializeRow < ' frame > for Row {
146+ impl < ' frame , ' metadata > DeserializeRow < ' frame , ' metadata > for Row {
144147 #[ inline]
145148 fn type_check ( _specs : & [ ColumnSpec ] ) -> Result < ( ) , TypeCheckError > {
146149 // CqlValues accept all types, no type checking needed.
147150 Ok ( ( ) )
148151 }
149152
150153 #[ inline]
151- fn deserialize ( mut row : ColumnIterator < ' frame > ) -> Result < Self , DeserializationError > {
154+ fn deserialize (
155+ mut row : ColumnIterator < ' frame , ' metadata > ,
156+ ) -> Result < Self , DeserializationError > {
152157 let mut columns = Vec :: with_capacity ( row. size_hint ( ) . 0 ) ;
153158 while let Some ( column) = row
154159 . next ( )
@@ -181,17 +186,17 @@ impl<'frame> DeserializeRow<'frame> for Row {
181186/// and needed conversions, issuing meaningful errors in case something goes wrong.
182187macro_rules! impl_tuple {
183188 ( $( $Ti: ident) ,* ; $( $idx: literal) ,* ; $( $idf: ident) ,* ) => {
184- impl <' frame, $( $Ti) ,* > DeserializeRow <' frame> for ( $( $Ti, ) * )
189+ impl <' frame, ' metadata , $( $Ti) ,* > DeserializeRow <' frame, ' metadata > for ( $( $Ti, ) * )
185190 where
186- $( $Ti: DeserializeValue <' frame>) ,*
191+ $( $Ti: DeserializeValue <' frame, ' metadata >) ,*
187192 {
188193 fn type_check( specs: & [ ColumnSpec ] ) -> Result <( ) , TypeCheckError > {
189194 const TUPLE_LEN : usize = ( & [ $( $idx) ,* ] as & [ i32 ] ) . len( ) ;
190195
191196 let column_types_iter = || specs. iter( ) . map( |spec| spec. typ( ) . clone( ) . into_owned( ) ) ;
192197 if let [ $( $idf) ,* ] = & specs {
193198 $(
194- <$Ti as DeserializeValue <' frame>>:: type_check( $idf. typ( ) )
199+ <$Ti as DeserializeValue <' frame, ' metadata >>:: type_check( $idf. typ( ) )
195200 . map_err( |err| mk_typck_err:: <Self >( column_types_iter( ) , BuiltinTypeCheckErrorKind :: ColumnTypeCheckFailed {
196201 column_index: $idx,
197202 column_name: specs[ $idx] . name( ) . to_owned( ) ,
@@ -206,7 +211,7 @@ macro_rules! impl_tuple {
206211 }
207212 }
208213
209- fn deserialize( mut row: ColumnIterator <' frame>) -> Result <Self , DeserializationError > {
214+ fn deserialize( mut row: ColumnIterator <' frame, ' metadata >) -> Result <Self , DeserializationError > {
210215 const TUPLE_LEN : usize = ( & [ $( $idx) ,* ] as & [ i32 ] ) . len( ) ;
211216
212217 let ret = (
@@ -217,7 +222,7 @@ macro_rules! impl_tuple {
217222 $idx
218223 ) ) . map_err( deser_error_replace_rust_name:: <Self >) ?;
219224
220- <$Ti as DeserializeValue <' frame>>:: deserialize( column. spec. typ( ) , column. slice)
225+ <$Ti as DeserializeValue <' frame, ' metadata >>:: deserialize( column. spec. typ( ) , column. slice)
221226 . map_err( |err| mk_deser_err:: <Self >( BuiltinDeserializationErrorKind :: ColumnDeserializationFailed {
222227 column_index: column. index,
223228 column_name: column. spec. name( ) . to_owned( ) ,
0 commit comments