Skip to content

Commit 361ec7e

Browse files
committed
Hygiene integration test expansion
This test was checking only the most basic scenario: a structure that is serialized / deserialized by name matching, and has no field attributes. Adding more advanced scenarios uncovered many hygiene issues in the macros - those issues were fixed in previous commits.
1 parent ba93b5f commit 361ec7e

File tree

1 file changed

+144
-0
lines changed

1 file changed

+144
-0
lines changed

scylla/tests/integration/hygiene.rs

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,150 @@ macro_rules! test_crate {
166166
assert_eq!(value_with_same_layout, deserialized_value);
167167
}
168168
}
169+
170+
// Test attributes for value struct with name flavor
171+
#[derive(
172+
_scylla::macros::DeserializeValue, _scylla::macros::SerializeValue, PartialEq, Debug,
173+
)]
174+
#[scylla(crate = _scylla)]
175+
struct TestStructByName {
176+
a: ::core::primitive::i32,
177+
#[scylla(allow_missing)]
178+
b: ::core::primitive::i32,
179+
#[scylla(default_when_null)]
180+
c: ::core::primitive::i32,
181+
#[scylla(skip)]
182+
d: ::core::primitive::i32,
183+
#[scylla(rename = "f")]
184+
e: ::core::primitive::i32,
185+
g: ::core::primitive::i32,
186+
}
187+
188+
// Test attributes for value struct with strict name flavor
189+
#[derive(
190+
_scylla::macros::DeserializeValue, _scylla::macros::SerializeValue, PartialEq, Debug,
191+
)]
192+
#[scylla(crate = _scylla, forbid_excess_udt_fields)]
193+
struct TestStructByNameStrict {
194+
a: ::core::primitive::i32,
195+
#[scylla(allow_missing)]
196+
b: ::core::primitive::i32,
197+
#[scylla(default_when_null)]
198+
c: ::core::primitive::i32,
199+
#[scylla(skip)]
200+
d: ::core::primitive::i32,
201+
#[scylla(rename = "f")]
202+
e: ::core::primitive::i32,
203+
g: ::core::primitive::i32,
204+
}
205+
206+
// Test attributes for value struct with ordered flavor
207+
#[derive(
208+
_scylla::macros::DeserializeValue, _scylla::macros::SerializeValue, PartialEq, Debug,
209+
)]
210+
#[scylla(crate = _scylla, flavor = "enforce_order")]
211+
struct TestStructOrdered {
212+
a: ::core::primitive::i32,
213+
#[scylla(allow_missing)]
214+
b: ::core::primitive::i32,
215+
#[scylla(default_when_null)]
216+
c: ::core::primitive::i32,
217+
#[scylla(skip)]
218+
d: ::core::primitive::i32,
219+
#[scylla(rename = "f")]
220+
e: ::core::primitive::i32,
221+
g: ::core::primitive::i32,
222+
}
223+
224+
// Test attributes for value struct with strict ordered flavor
225+
#[derive(
226+
_scylla::macros::DeserializeValue, _scylla::macros::SerializeValue, PartialEq, Debug,
227+
)]
228+
#[scylla(crate = _scylla, flavor = "enforce_order", forbid_excess_udt_fields)]
229+
struct TestStructOrderedStrict {
230+
a: ::core::primitive::i32,
231+
#[scylla(allow_missing)]
232+
b: ::core::primitive::i32,
233+
#[scylla(default_when_null)]
234+
c: ::core::primitive::i32,
235+
#[scylla(skip)]
236+
d: ::core::primitive::i32,
237+
#[scylla(rename = "f")]
238+
e: ::core::primitive::i32,
239+
g: ::core::primitive::i32,
240+
}
241+
242+
// Test attributes for value struct with ordered flavor and skipped name checks
243+
#[derive(
244+
_scylla::macros::DeserializeValue, _scylla::macros::SerializeValue, PartialEq, Debug,
245+
)]
246+
#[scylla(crate = _scylla, flavor = "enforce_order", skip_name_checks)]
247+
struct TestStructOrderedSkipped {
248+
a: ::core::primitive::i32,
249+
b: ::core::primitive::i32,
250+
#[scylla(default_when_null)]
251+
c: ::core::primitive::i32,
252+
d: ::core::primitive::i32,
253+
#[scylla(skip)]
254+
e: ::core::primitive::i32,
255+
#[scylla(allow_missing)]
256+
g: ::core::primitive::i32,
257+
}
258+
259+
// Test attributes for value struct with strict ordered flavor and skipped name checks
260+
#[derive(
261+
_scylla::macros::DeserializeValue, _scylla::macros::SerializeValue, PartialEq, Debug,
262+
)]
263+
#[scylla(crate = _scylla, flavor = "enforce_order", skip_name_checks, forbid_excess_udt_fields)]
264+
struct TestStructOrderedStrictSkipped {
265+
a: ::core::primitive::i32,
266+
b: ::core::primitive::i32,
267+
#[scylla(default_when_null)]
268+
c: ::core::primitive::i32,
269+
d: ::core::primitive::i32,
270+
#[scylla(skip)]
271+
e: ::core::primitive::i32,
272+
#[scylla(allow_missing)]
273+
g: ::core::primitive::i32,
274+
}
275+
276+
// Test attributes for row struct with name flavor
277+
#[derive(
278+
_scylla::macros::DeserializeRow, _scylla::macros::SerializeRow, PartialEq, Debug,
279+
)]
280+
#[scylla(crate = _scylla)]
281+
struct TestRowByName {
282+
#[scylla(skip)]
283+
a: ::core::primitive::i32,
284+
#[scylla(rename = "f")]
285+
b: ::core::primitive::i32,
286+
c: ::core::primitive::i32,
287+
}
288+
289+
// Test attributes for row struct with ordered flavor
290+
#[derive(
291+
_scylla::macros::DeserializeRow, _scylla::macros::SerializeRow, PartialEq, Debug,
292+
)]
293+
#[scylla(crate = _scylla, flavor = "enforce_order")]
294+
struct TestRowByOrder {
295+
#[scylla(skip)]
296+
a: ::core::primitive::i32,
297+
#[scylla(rename = "f")]
298+
b: ::core::primitive::i32,
299+
c: ::core::primitive::i32,
300+
}
301+
302+
// Test attributes for row struct with ordered flavor and skipped name checks
303+
#[derive(
304+
_scylla::macros::DeserializeRow, _scylla::macros::SerializeRow, PartialEq, Debug,
305+
)]
306+
#[scylla(crate = _scylla, flavor = "enforce_order", skip_name_checks)]
307+
struct TestRowByOrderSkipped {
308+
#[scylla(skip)]
309+
a: ::core::primitive::i32,
310+
b: ::core::primitive::i32,
311+
c: ::core::primitive::i32,
312+
}
169313
};
170314
}
171315

0 commit comments

Comments
 (0)