@@ -231,3 +231,64 @@ impl Display for BuiltinDeserializationErrorKind {
231231 }
232232 }
233233}
234+
235+ #[ cfg( test) ]
236+ mod tests {
237+ use bytes:: Bytes ;
238+
239+ use crate :: frame:: response:: result:: { ColumnSpec , ColumnType } ;
240+ use crate :: types:: deserialize:: { DeserializationError , FrameSlice } ;
241+
242+ use super :: super :: tests:: { serialize_cells, spec} ;
243+ use super :: { ColumnIterator , DeserializeRow } ;
244+
245+ #[ test]
246+ fn test_deserialization_as_column_iterator ( ) {
247+ let col_specs = [
248+ spec ( "i1" , ColumnType :: Int ) ,
249+ spec ( "i2" , ColumnType :: Text ) ,
250+ spec ( "i3" , ColumnType :: Counter ) ,
251+ ] ;
252+ let serialized_values = serialize_cells ( [ val_int ( 123 ) , val_str ( "ScyllaDB" ) , None ] ) ;
253+ let mut iter = deserialize :: < ColumnIterator > ( & col_specs, & serialized_values) . unwrap ( ) ;
254+
255+ let col1 = iter. next ( ) . unwrap ( ) . unwrap ( ) ;
256+ assert_eq ! ( col1. spec. name, "i1" ) ;
257+ assert_eq ! ( col1. spec. typ, ColumnType :: Int ) ;
258+ assert_eq ! ( col1. slice. unwrap( ) . as_slice( ) , & 123i32 . to_be_bytes( ) ) ;
259+
260+ let col2 = iter. next ( ) . unwrap ( ) . unwrap ( ) ;
261+ assert_eq ! ( col2. spec. name, "i2" ) ;
262+ assert_eq ! ( col2. spec. typ, ColumnType :: Text ) ;
263+ assert_eq ! ( col2. slice. unwrap( ) . as_slice( ) , "ScyllaDB" . as_bytes( ) ) ;
264+
265+ let col3 = iter. next ( ) . unwrap ( ) . unwrap ( ) ;
266+ assert_eq ! ( col3. spec. name, "i3" ) ;
267+ assert_eq ! ( col3. spec. typ, ColumnType :: Counter ) ;
268+ assert ! ( col3. slice. is_none( ) ) ;
269+
270+ assert ! ( iter. next( ) . is_none( ) ) ;
271+ }
272+
273+ fn val_int ( i : i32 ) -> Option < Vec < u8 > > {
274+ Some ( i. to_be_bytes ( ) . to_vec ( ) )
275+ }
276+
277+ fn val_str ( s : & str ) -> Option < Vec < u8 > > {
278+ Some ( s. as_bytes ( ) . to_vec ( ) )
279+ }
280+
281+ fn deserialize < ' frame , R > (
282+ specs : & ' frame [ ColumnSpec ] ,
283+ byts : & ' frame Bytes ,
284+ ) -> Result < R , DeserializationError >
285+ where
286+ R : DeserializeRow < ' frame > ,
287+ {
288+ <R as DeserializeRow < ' frame > >:: type_check ( specs)
289+ . map_err ( |typecheck_err| DeserializationError ( typecheck_err. 0 ) ) ?;
290+ let slice = FrameSlice :: new ( byts) ;
291+ let iter = ColumnIterator :: new ( specs, slice) ;
292+ <R as DeserializeRow < ' frame > >:: deserialize ( iter)
293+ }
294+ }
0 commit comments