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