blob: 5d09c7dbd623b5ed4807eef7d6a423aa647f7b77 [file] [log] [blame]
// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef DIAGNOSTICS_DPSL_TEST_UTILS_COMMON_H_
#define DIAGNOSTICS_DPSL_TEST_UTILS_COMMON_H_
#include <iostream>
#include <memory>
#include <string>
#include <google/protobuf/message.h>
#include <google/protobuf/util/json_util.h>
namespace diagnostics {
namespace test_utils {
// Prints a proto to std::cout as JSON, including the proto name and the body.
// Returns whether printing was successful.
//
// For message
// message GetOsVersionResponse {
// string version = "12440.0.2019_08_20_1256"
// }
// The following is printed:
// {
// "body": {
// "version": "12440.0.2019_08_20_1256"
// },
// "name": "GetOsVersionResponse"
// }
// This format was chosen so that it could be deserialized back to a proto.
bool PrintProto(const google::protobuf::Message& message);
// Converts a JSON string to it's protobuf representation.
template <typename Proto>
std::unique_ptr<Proto> JsonToProto(const std::string& request_json) {
auto request = std::make_unique<Proto>();
auto status =
google::protobuf::util::JsonStringToMessage(request_json, request.get());
if (!status.ok()) {
std::cerr << "Failed to parse '" << request_json << "' to "
<< Proto::descriptor()->name() << " proto: " << status << "\n";
return nullptr;
}
return request;
}
} // namespace test_utils
} // namespace diagnostics
#endif // DIAGNOSTICS_DPSL_TEST_UTILS_COMMON_H_