1 // Copyright (c) 2012-2014 Konstantin Isakov <ikm@zbackup.org> and ZBackup contributors, see CONTRIBUTORS
2 // Part of ZBackup. Licensed under GNU GPLv2 or later + OpenSSL, see LICENSE
3 
4 #include "message.hh"
5 
6 #include <stdint.h>
7 
8 namespace Message {
9 
serialize(MessageLite const & message,ZeroCopyOutputStream & stream)10 void serialize( MessageLite const & message, ZeroCopyOutputStream & stream )
11 {
12   CodedOutputStream cos( &stream );
13   serialize( message, cos );
14 }
15 
serialize(MessageLite const & message,CodedOutputStream & cos)16 void serialize( MessageLite const & message, CodedOutputStream & cos )
17 {
18   cos.WriteVarint32( message.ByteSize() );
19   message.SerializeWithCachedSizes( &cos );
20   if ( cos.HadError() )
21     throw exCantSerialize( message.GetTypeName() );
22 }
23 
parse(MessageLite & message,ZeroCopyInputStream & stream)24 void parse( MessageLite & message, ZeroCopyInputStream & stream )
25 {
26   CodedInputStream cis( &stream );
27   parse( message, cis );
28 }
29 
parse(MessageLite & message,CodedInputStream & cis)30 void parse( MessageLite & message, CodedInputStream & cis )
31 {
32   uint32_t v;
33   if ( !cis.ReadVarint32( &v ) )
34     throw exCantParse( message.GetTypeName() );
35 
36   CodedInputStream::Limit limit = cis.PushLimit( v );
37 
38   if( !message.ParseFromCodedStream( &cis ) )
39     throw exCantParse( message.GetTypeName() );
40 
41   cis.PopLimit( limit );
42 }
43 
44 }
45