pb2json.h
1 // Copyright 2018, Beeri 15. All rights reserved.
2 // Author: Roman Gershman (romange@gmail.com)
3 //
4 #pragma once
5 
6 #include <functional>
7 #include <string>
8 
9 #include <google/protobuf/message.h>
10 
11 #include "util/status.h"
12 
13 namespace util {
14 
16  typedef std::function<std::string(const ::google::protobuf::FieldDescriptor& fd)> FieldNameCb;
17 
18  typedef std::function<bool(const ::google::protobuf::FieldDescriptor& fd)> BoolAsIntegerPred;
19 
20  bool enum_as_ints = false;
21 
22  FieldNameCb field_name_cb;
23  BoolAsIntegerPred bool_as_int;
24 };
25 
26 std::string Pb2Json(const ::google::protobuf::Message& msg,
27  const Pb2JsonOptions& options = Pb2JsonOptions());
28 
30  bool skip_unknown_fields;
31 
32  Json2PbOptions(bool sk = true) : skip_unknown_fields(sk) {}
33 };
34 
35 Status Json2Pb(std::string json, ::google::protobuf::Message* msg, const Json2PbOptions& options);
36 
37 inline Status Json2Pb(std::string json, ::google::protobuf::Message* msg,
38  bool skip_unknown_fields = true) {
39  return Json2Pb(std::move(json), msg, Json2PbOptions(skip_unknown_fields));
40 }
41 
42 } // namespace util