Description
Currently, stout/protobuf.hpp provides a JSON::Protobuf utility which converts a google::protobuf::Message into a JSON::Object.
We should add the support for google::protobuf::RepeatedPtrField<T> by introducing overloaded functions.
namespace JSON { Object protobuf(const google::protobuf::Message& message) { Object object; /* Move the body of JSON::Protobuf constructor here. */ return object; } template <typename T> Array protobuf(const google::protobuf::RepeatedPtrField<T>& repeated) { static_assert(std::is_convertible<T*, google::protobuf::Message*>::value, "T must be a google::protobuf::Message"); JSON::Array array; array.values.reserve(repeated.size()); foreach (const T& elem, repeated) { array.values.push_back(JSON::Protobuf(elem)); } return array; } }
The new RepeatedPtrField version can be used in at least the following places:
- src/common/http.cpp
- src/master/http.cpp
- src/slave/containerizer/mesos/containerizer.cpp
- src/tests/reservation_endpoints_tests.cpp
- src/tests/resources_tests.cpp: ResourcesTest.ParsingFromJSON