@@ -19,6 +19,7 @@ use common::Descriptor;
19
19
use descriptors:: {
20
20
enum_desc:: EnumDescriptor , struct_desc:: StructDescriptor , union_desc:: UnionDescriptor ,
21
21
} ;
22
+ use helpers:: latest_version_check;
22
23
use proc_macro:: TokenStream ;
23
24
use quote:: quote;
24
25
use syn:: { parse_macro_input, DeriveInput } ;
@@ -50,16 +51,18 @@ pub fn impl_versionize(input: TokenStream) -> proc_macro::TokenStream {
50
51
let version = descriptor. version ( ) ;
51
52
let versioned_serializer = descriptor. generate_serializer ( ) ;
52
53
let deserializer = descriptor. generate_deserializer ( ) ;
53
- let serializer = quote ! {
54
- // Get the struct version for the input app_version.
55
- let version = version_map. get_type_version( app_version, <Self as Versionize >:: type_id( ) ) ;
54
+
55
+ let mut serializer = proc_macro2:: TokenStream :: new ( ) ;
56
+ serializer. extend ( latest_version_check ( version) ) ;
57
+ serializer. extend ( quote ! {
56
58
// We will use this copy to perform semantic serialization.
57
59
let mut copy_of_self = self . clone( ) ;
58
60
match version {
59
61
#versioned_serializer
60
62
_ => panic!( "Unknown {:?} version {}." , & <Self as Versionize >:: type_id( ) , version)
61
63
}
62
- } ;
64
+ } ) ;
65
+
63
66
( quote ! {
64
67
impl Versionize for #ident #generics {
65
68
fn serialize<W : std:: io:: Write >( & self , writer: & mut W , version_map: & VersionMap , app_version: u16 ) -> VersionizeResult <( ) > {
0 commit comments