@@ -7,69 +7,164 @@ macro_rules! test_crate {
77 extern crate $name as _scylla;
88
99 #[ derive(
10- _scylla:: macros:: FromRow ,
11- _scylla:: macros:: FromUserType ,
12- _scylla:: macros:: IntoUserType ,
13- _scylla:: macros:: ValueList ,
10+ _scylla:: macros:: DeserializeRow ,
11+ _scylla:: macros:: DeserializeValue ,
12+ _scylla:: macros:: SerializeValue ,
13+ _scylla:: macros:: SerializeRow ,
1414 PartialEq ,
1515 Debug ,
1616 ) ]
17- #[ scylla_crate = " _scylla" ]
17+ #[ scylla ( crate = _scylla) ]
1818 struct TestStruct {
1919 a: :: core:: primitive:: i32 ,
2020 }
2121 #[ test]
22- fn test_rename( ) {
23- use _scylla:: cql_to_rust:: { FromCqlVal , FromRow } ;
24- use _scylla:: frame:: response:: result:: CqlValue ;
25- use _scylla:: frame:: value:: { Value , ValueList } ;
22+ fn test_impl_traits( ) {
23+ use _scylla:: deserialize:: DeserializeRow ;
24+ use _scylla:: deserialize:: DeserializeValue ;
25+ use _scylla:: serialize:: row:: SerializeRow ;
26+ use _scylla:: serialize:: value:: SerializeValue ;
2627
2728 fn derived<T >( )
2829 where
29- T : FromRow + FromCqlVal <CqlValue > + Value + ValueList ,
30+ T : for <' x> DeserializeRow <' x, ' x>
31+ + for <' x> DeserializeValue <' x, ' x>
32+ + SerializeValue
33+ + SerializeRow ,
3034 {
3135 }
3236 derived:: <TestStruct >( ) ;
3337 }
3438 #[ test]
35- fn test_derives( ) {
39+ fn test_row_ser_deser( ) {
40+ use crate :: utils:: setup_tracing;
41+ use :: bytes:: Bytes ;
3642 use :: core:: primitive:: u8 ;
3743 use :: std:: assert_eq;
38- use :: std:: option:: Option :: Some ;
3944 use :: std:: vec:: Vec ;
40- use _scylla:: _macro_internal:: { CqlValue , Row , Value , ValueList } ;
41- use _scylla:: cql_to_rust:: FromRow ;
45+ use _scylla:: deserialize:: row:: ColumnIterator ;
46+ use _scylla:: deserialize:: DeserializeRow ;
47+ use _scylla:: deserialize:: FrameSlice ;
48+ use _scylla:: frame:: response:: result:: ColumnSpec ;
49+ use _scylla:: frame:: response:: result:: ColumnType ;
50+ use _scylla:: frame:: response:: result:: TableSpec ;
51+ use _scylla:: serialize:: row:: RowSerializationContext ;
52+ use _scylla:: serialize:: row:: SerializeRow ;
53+ use _scylla:: serialize:: writers:: RowWriter ;
54+
55+ setup_tracing( ) ;
4256
4357 let test_struct = TestStruct { a: 16 } ;
44- fn get_row( ) -> Row {
45- Row {
46- columns: :: std:: vec![ Some ( CqlValue :: Int ( 16 ) ) ] ,
47- }
58+ let tuple_with_same_layout: ( i32 , ) = ( 16 , ) ;
59+ let column_types = & [ ColumnSpec :: borrowed(
60+ "a" ,
61+ ColumnType :: Int ,
62+ TableSpec :: borrowed( "ks" , "table" ) ,
63+ ) ] ;
64+ let ctx = RowSerializationContext :: from_specs( column_types) ;
65+
66+ let mut buf_struct = Vec :: <u8 >:: new( ) ;
67+ {
68+ let mut writer = RowWriter :: new( & mut buf_struct) ;
69+ SerializeRow :: serialize( & test_struct, & ctx, & mut writer) . unwrap( ) ;
4870 }
4971
50- let st: TestStruct = FromRow :: from_row( get_row( ) ) . unwrap( ) ;
51- assert_eq!( st, test_struct) ;
72+ let mut buf_tuple = Vec :: <u8 >:: new( ) ;
73+ {
74+ let mut writer = RowWriter :: new( & mut buf_tuple) ;
75+ SerializeRow :: serialize( & tuple_with_same_layout, & ctx, & mut writer) . unwrap( ) ;
76+ }
5277
53- let udt = get_row( ) . into_typed:: <TestStruct >( ) . unwrap( ) ;
54- assert_eq!( udt, test_struct) ;
78+ assert_eq!( buf_struct, buf_tuple) ;
5579
56- let mut buf = Vec :: <u8 >:: new( ) ;
57- test_struct. serialize( & mut buf) . unwrap( ) ;
58- let mut buf_assert = Vec :: <u8 >:: new( ) ;
59- let tuple_with_same_layout: ( i32 , ) = ( 16 , ) ;
60- tuple_with_same_layout. serialize( & mut buf_assert) . unwrap( ) ;
61- assert_eq!( buf, buf_assert) ;
80+ {
81+ assert!( <TestStruct as DeserializeRow >:: type_check( column_types) . is_ok( ) ) ;
82+ let deserialized_struct: TestStruct =
83+ <TestStruct as DeserializeRow >:: deserialize( ColumnIterator :: new(
84+ column_types,
85+ FrameSlice :: new( & Bytes :: copy_from_slice( & buf_struct) ) ,
86+ ) )
87+ . unwrap( ) ;
88+ assert_eq!( test_struct, deserialized_struct) ;
89+ }
6290
63- let sv = test_struct. serialized( ) . unwrap( ) . into_owned( ) ;
64- let sv2 = tuple_with_same_layout. serialized( ) . unwrap( ) . into_owned( ) ;
65- assert_eq!( sv, sv2) ;
91+ {
92+ assert!( <( i32 , ) as DeserializeRow >:: type_check( column_types) . is_ok( ) ) ;
93+ let deserialized_tuple: ( i32 , ) =
94+ <( i32 , ) as DeserializeRow >:: deserialize( ColumnIterator :: new(
95+ column_types,
96+ FrameSlice :: new( & Bytes :: copy_from_slice( & buf_tuple) ) ,
97+ ) )
98+ . unwrap( ) ;
99+ assert_eq!( tuple_with_same_layout, deserialized_tuple) ;
100+ }
66101 }
67102
68- #[ allow( unused) ]
69- #[ derive( _scylla:: macros:: SerializeValue , _scylla:: macros:: SerializeRow ) ]
70- #[ scylla( crate = _scylla) ]
71- struct TestStructNew {
72- x: :: core:: primitive:: i32 ,
103+ #[ test]
104+ fn test_value_ser_deser( ) {
105+ use crate :: utils:: setup_tracing;
106+ use :: bytes:: Bytes ;
107+ use :: core:: primitive:: u8 ;
108+ use :: std:: assert_eq;
109+ use :: std:: convert:: Into ;
110+ use :: std:: option:: Option :: Some ;
111+ use :: std:: string:: ToString ;
112+ use :: std:: vec;
113+ use :: std:: vec:: Vec ;
114+ use :: tracing:: info;
115+ use _scylla:: deserialize:: DeserializeValue ;
116+ use _scylla:: deserialize:: FrameSlice ;
117+ use _scylla:: frame:: response:: result:: { ColumnType , CqlValue } ;
118+ use _scylla:: serialize:: value:: SerializeValue ;
119+ use _scylla:: serialize:: writers:: CellWriter ;
120+
121+ setup_tracing( ) ;
122+
123+ let test_struct = TestStruct { a: 16 } ;
124+ let value_with_same_layout: CqlValue = CqlValue :: UserDefinedType {
125+ keyspace: "some_ks" . to_string( ) ,
126+ type_name: "some_type" . to_string( ) ,
127+ fields: vec![ ( "a" . to_string( ) , Some ( CqlValue :: Int ( 16 ) ) ) ] ,
128+ } ;
129+ let udt_type = ColumnType :: UserDefinedType {
130+ type_name: "some_type" . into( ) ,
131+ keyspace: "some_ks" . into( ) ,
132+ field_types: vec![ ( "a" . into( ) , ColumnType :: Int ) ] ,
133+ } ;
134+
135+ let mut buf_struct = Vec :: <u8 >:: new( ) ;
136+ {
137+ let writer = CellWriter :: new( & mut buf_struct) ;
138+ SerializeValue :: serialize( & test_struct, & udt_type, writer) . unwrap( ) ;
139+ info!( "struct buffer: {:?}" , buf_struct) ;
140+ }
141+
142+ let mut buf_value = Vec :: <u8 >:: new( ) ;
143+ {
144+ let writer = CellWriter :: new( & mut buf_value) ;
145+ SerializeValue :: serialize( & value_with_same_layout, & udt_type, writer) . unwrap( ) ;
146+ info!( "value buffer: {:?}" , buf_struct) ;
147+ }
148+
149+ assert_eq!( buf_struct, buf_value) ;
150+
151+ {
152+ assert!( <TestStruct as DeserializeValue >:: type_check( & udt_type) . is_ok( ) ) ;
153+ let bytes_buf = Bytes :: copy_from_slice( & buf_struct) ;
154+ let slice = FrameSlice :: new( & bytes_buf) . read_cql_bytes( ) . unwrap( ) ;
155+ let deserialized_struct: TestStruct =
156+ <TestStruct as DeserializeValue >:: deserialize( & udt_type, slice) . unwrap( ) ;
157+ assert_eq!( test_struct, deserialized_struct) ;
158+ }
159+
160+ {
161+ assert!( <CqlValue as DeserializeValue >:: type_check( & udt_type) . is_ok( ) ) ;
162+ let bytes_buf = Bytes :: copy_from_slice( & buf_value) ;
163+ let slice = FrameSlice :: new( & bytes_buf) . read_cql_bytes( ) . unwrap( ) ;
164+ let deserialized_value: CqlValue =
165+ <CqlValue as DeserializeValue >:: deserialize( & udt_type, slice) . unwrap( ) ;
166+ assert_eq!( value_with_same_layout, deserialized_value) ;
167+ }
73168 }
74169 } ;
75170}
0 commit comments