@@ -264,6 +264,38 @@ where
264
264
}
265
265
}
266
266
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
+
267
299
#[ cfg( test) ]
268
300
mod tests {
269
301
#![ allow( non_upper_case_globals) ]
@@ -325,6 +357,21 @@ mod tests {
325
357
primitive_int_test ! ( f64 , test_ser_de_f64) ;
326
358
primitive_int_test ! ( char , test_ser_de_char) ;
327
359
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
+
328
375
#[ repr( u32 ) ]
329
376
#[ derive( Debug , Versionize , PartialEq , Clone ) ]
330
377
pub enum TestState {
0 commit comments