Skip to content

Commit 94a2619

Browse files
acatangiuioanachirca
authored andcommitted
implement Versionize for tuple of 2 elems
Signed-off-by: Adrian Catangiu <[email protected]>
1 parent 2216235 commit 94a2619

File tree

3 files changed

+49
-4
lines changed

3 files changed

+49
-4
lines changed

coverage_config_aarch64.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
{"coverage_score": 91.2, "exclude_path": "", "crate_features": ""}
2-
1+
{"coverage_score": 92.8, "exclude_path": "", "crate_features": ""}

coverage_config_x86_64.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
{"coverage_score": 92.2, "exclude_path": "", "crate_features": ""}
2-
1+
{"coverage_score": 93.0, "exclude_path": "", "crate_features": ""}

src/primitives.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,38 @@ where
264264
}
265265
}
266266

267+
// Manual implementation for tuple of 2 elems.
268+
impl<T: Versionize, U: Versionize> Versionize for (T, U) {
269+
#[inline]
270+
fn serialize<W: std::io::Write>(
271+
&self,
272+
writer: &mut W,
273+
version_map: &VersionMap,
274+
app_version: u16,
275+
) -> VersionizeResult<()> {
276+
self.0.serialize(writer, version_map, app_version)?;
277+
self.1.serialize(writer, version_map, app_version)?;
278+
Ok(())
279+
}
280+
281+
#[inline]
282+
fn deserialize<R: std::io::Read>(
283+
reader: &mut R,
284+
version_map: &VersionMap,
285+
app_version: u16,
286+
) -> VersionizeResult<Self> {
287+
Ok((
288+
T::deserialize(reader, version_map, app_version)?,
289+
U::deserialize(reader, version_map, app_version)?,
290+
))
291+
}
292+
293+
// Not used yet.
294+
fn version() -> u16 {
295+
1
296+
}
297+
}
298+
267299
#[cfg(test)]
268300
mod tests {
269301
#![allow(non_upper_case_globals)]
@@ -325,6 +357,21 @@ mod tests {
325357
primitive_int_test!(f64, test_ser_de_f64);
326358
primitive_int_test!(char, test_ser_de_char);
327359

360+
#[test]
361+
fn test_ser_de_u32_tuple() {
362+
let vm = VersionMap::new();
363+
let mut snapshot_mem = vec![0u8; 64];
364+
365+
let store: (u32, u32) = (std::u32::MIN, std::u32::MAX);
366+
store
367+
.serialize(&mut snapshot_mem.as_mut_slice(), &vm, 1)
368+
.unwrap();
369+
let restore =
370+
<(u32, u32) as Versionize>::deserialize(&mut snapshot_mem.as_slice(), &vm, 1).unwrap();
371+
372+
assert_eq!(store, restore);
373+
}
374+
328375
#[repr(u32)]
329376
#[derive(Debug, Versionize, PartialEq, Clone)]
330377
pub enum TestState {

0 commit comments

Comments
 (0)