userver: userver/dump/protobuf.hpp Source File
Loading...
Searching...
No Matches
protobuf.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/dump/protobuf.hpp
4/// @brief Dumping support for protobuf messages
5///
6/// @ingroup userver_dump_read_write
7
8#include <type_traits>
9
10#include <google/protobuf/message_lite.h>
11
12#include <userver/dump/fwd.hpp>
13
14USERVER_NAMESPACE_BEGIN
15
16namespace dump {
17
18namespace impl {
19
20void WriteProtoMessageToDump(Writer& writer, const google::protobuf::MessageLite& message);
21
22void ParseProtoMessageFromDump(Reader& reader, google::protobuf::MessageLite& message);
23
24} // namespace impl
25
26/// @brief Protobuf message dumping support
27template <typename T>
28requires std::is_base_of_v<google::protobuf::MessageLite, T>
29void Write(Writer& writer, const T& value) {
30 impl::WriteProtoMessageToDump(writer, value);
31}
32
33/// @brief Protobuf message dumping support
34template <typename T>
35requires std::is_base_of_v<google::protobuf::MessageLite, T>
36T Read(Reader& reader, To<T>) {
37 T value;
38 impl::ParseProtoMessageFromDump(reader, value);
39 return value;
40}
41
42} // namespace dump
43
44USERVER_NAMESPACE_END