7#include <google/protobuf/struct.pb.h>
8#include <google/protobuf/util/json_util.h>
10#include <userver/formats/json/serialize.hpp>
11#include <userver/formats/json/value.hpp>
13USERVER_NAMESPACE_BEGIN
19extern const google::protobuf::util::JsonPrintOptions kDefaultJsonPrintOptions;
20extern const google::protobuf::util::JsonParseOptions kDefaultJsonParseOptions;
22void FromJsonStringImpl(
23 std::string_view json_string,
24 google::protobuf::Message& output,
25 const google::protobuf::util::JsonParseOptions& options
33formats::json::Value
MessageToJson(
const google::protobuf::Message& message);
39 const google::protobuf::Message& message,
40 const google::protobuf::util::JsonPrintOptions& options
50 const google::protobuf::Message& message,
51 const google::protobuf::util::JsonPrintOptions& options
57template <
typename Message>
60 impl::FromJsonStringImpl(formats::json::ToString(json), message, impl::kDefaultJsonParseOptions);
67template <
typename Message>
68Message
JsonToMessage(
const formats::json::Value& json,
const google::protobuf::util::JsonParseOptions& options) {
70 impl::FromJsonStringImpl(formats::json::ToString(json), message, options);
76template <
typename Message>
79 impl::FromJsonStringImpl(json_string, message, impl::kDefaultJsonParseOptions);
85template <
typename Message>
86Message
FromJsonString(std::string_view json_string,
const google::protobuf::util::JsonParseOptions& options) {
88 impl::FromJsonStringImpl(json_string, message, options);
94namespace formats::serialize {
106json::Value Serialize(
const google::protobuf::Message& message, To<json::Value>);
110namespace formats::parse {
122template <
typename Message,
typename = std::enable_if_t<std::is_base_of_v<google::protobuf::Message, Message>>>
123Message
Parse(
const json::Value& value, To<Message>) {
124 return ugrpc::JsonToMessage<Message>(value);
129google::protobuf::Value Parse(
const json::Value& value, To<google::protobuf::Value>);
132google::protobuf::Struct Parse(
const json::Value& value, To<google::protobuf::Struct>);
135google::protobuf::ListValue Parse(
const json::Value& value, To<google::protobuf::ListValue>);