@@ -19,6 +19,7 @@ use common::Descriptor;
1919use descriptors:: {
2020 enum_desc:: EnumDescriptor , struct_desc:: StructDescriptor , union_desc:: UnionDescriptor ,
2121} ;
22+ use helpers:: latest_version_check;
2223use proc_macro:: TokenStream ;
2324use quote:: quote;
2425use syn:: { parse_macro_input, DeriveInput } ;
@@ -50,16 +51,18 @@ pub fn impl_versionize(input: TokenStream) -> proc_macro::TokenStream {
5051 let version = descriptor. version ( ) ;
5152 let versioned_serializer = descriptor. generate_serializer ( ) ;
5253 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 ! {
5658 // We will use this copy to perform semantic serialization.
5759 let mut copy_of_self = self . clone( ) ;
5860 match version {
5961 #versioned_serializer
6062 _ => panic!( "Unknown {:?} version {}." , & <Self as Versionize >:: type_id( ) , version)
6163 }
62- } ;
64+ } ) ;
65+
6366 ( quote ! {
6467 impl Versionize for #ident #generics {
6568 fn serialize<W : std:: io:: Write >( & self , writer: & mut W , version_map: & VersionMap , app_version: u16 ) -> VersionizeResult <( ) > {
0 commit comments