Line data Source code
1 : /*
2 : *
3 : * Copyright 2015, Google Inc.
4 : * All rights reserved.
5 : *
6 : * Redistribution and use in source and binary forms, with or without
7 : * modification, are permitted provided that the following conditions are
8 : * met:
9 : *
10 : * * Redistributions of source code must retain the above copyright
11 : * notice, this list of conditions and the following disclaimer.
12 : * * Redistributions in binary form must reproduce the above
13 : * copyright notice, this list of conditions and the following disclaimer
14 : * in the documentation and/or other materials provided with the
15 : * distribution.
16 : * * Neither the name of Google Inc. nor the names of its
17 : * contributors may be used to endorse or promote products derived from
18 : * this software without specific prior written permission.
19 : *
20 : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 : * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 : * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 : * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 : * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 : * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 : * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 : * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 : * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 : * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 : * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 : *
32 : */
33 :
34 : #ifndef GRPC_INTERNAL_CPP_PROTO_PROTO_UTILS_H
35 : #define GRPC_INTERNAL_CPP_PROTO_PROTO_UTILS_H
36 :
37 : #include <type_traits>
38 :
39 : #include <grpc/grpc.h>
40 : #include <grpc++/impl/serialization_traits.h>
41 : #include <grpc++/support/config_protobuf.h>
42 : #include <grpc++/support/status.h>
43 :
44 : namespace grpc {
45 :
46 : // Serialize the msg into a buffer created inside the function. The caller
47 : // should destroy the returned buffer when done with it. If serialization fails,
48 : // false is returned and buffer is left unchanged.
49 : Status SerializeProto(const grpc::protobuf::Message& msg,
50 : grpc_byte_buffer** buffer);
51 :
52 : // The caller keeps ownership of buffer and msg.
53 : Status DeserializeProto(grpc_byte_buffer* buffer, grpc::protobuf::Message* msg,
54 : int max_message_size);
55 :
56 : template <class T>
57 : class SerializationTraits<T, typename std::enable_if<std::is_base_of<
58 : grpc::protobuf::Message, T>::value>::type> {
59 : public:
60 2795489 : static Status Serialize(const grpc::protobuf::Message& msg,
61 : grpc_byte_buffer** buffer, bool* own_buffer) {
62 2795489 : *own_buffer = true;
63 2795489 : return SerializeProto(msg, buffer);
64 : }
65 2794687 : static Status Deserialize(grpc_byte_buffer* buffer,
66 : grpc::protobuf::Message* msg,
67 : int max_message_size) {
68 2794687 : auto status = DeserializeProto(buffer, msg, max_message_size);
69 2795768 : grpc_byte_buffer_destroy(buffer);
70 2795857 : return status;
71 : }
72 : };
73 :
74 : } // namespace grpc
75 :
76 : #endif // GRPC_INTERNAL_CPP_PROTO_PROTO_UTILS_H
|