Skip to content

Commit ba93b5f

Browse files
committed
hygiene IT: Migrate to new ser / deser frameworks
New version of the test verifies ser / deser identity for both row and value macros.
1 parent 64262a4 commit ba93b5f

File tree

1 file changed

+131
-36
lines changed

1 file changed

+131
-36
lines changed

scylla/tests/integration/hygiene.rs

Lines changed: 131 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)