| /* |
| * Copyright (C) 2019 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #pragma once |
| |
| #include <string> |
| |
| #include <jsonpb/error_or.h> |
| |
| #include <google/protobuf/message.h> |
| |
| namespace android { |
| namespace jsonpb { |
| |
| namespace internal { |
| ErrorOr<std::monostate> JsonStringToMessage(const std::string& content, |
| google::protobuf::Message* message); |
| } // namespace internal |
| |
| // TODO: JsonStringToMessage is a newly added function in protobuf |
| // and is not yet available in the android tree. Replace this function with |
| // https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.util.json_util#JsonStringToMessage.details |
| // when the android tree gets updated |
| template <typename T> |
| ErrorOr<T> JsonStringToMessage(const std::string& content) { |
| ErrorOr<T> ret; |
| auto error = internal::JsonStringToMessage(content, &*ret); |
| if (!error.ok()) { |
| return MakeError<T>(error.error()); |
| } |
| return ret; |
| } |
| |
| // TODO: MessageToJsonString is a newly added function in protobuf |
| // and is not yet available in the android tree. Replace this function with |
| // https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.util.json_util#MessageToJsonString.details |
| // when the android tree gets updated. |
| // |
| // The new MessageToJsonString also allows preserving proto field names. However, |
| // the function here can't. Hence, a field name "foo_bar" without json_name option |
| // will be "fooBar" in the final output. Additional checks are needed to ensure |
| // that doesn't happen. |
| ErrorOr<std::string> MessageToJsonString(const google::protobuf::Message& message); |
| |
| } // namespace jsonpb |
| } // namespace android |