-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/38342/#review100964
-----------------------------------------------------------
One high level suggestion.
After looking at our http code, I realized that we use the same pattern again
and again, for example:
```
JSON::Array array;
array.values.reserve(status.network_infos().size()); // MESOS-2353.
foreach (const NetworkInfo& info, status.network_infos()) {
array.values.push_back(model(info));
}
object.values["network_infos"] = std::move(array);
```
We cannot use newly added `JSON::protobuf()` here, because a different way for
rendering JSON from protobuf is used. Without digging deep inside, I know three
ways how we create a `JSON` out of a proto in our codebase:
- wrap in `JSON::Protobuf()` for individual messages;
- wrap in one of the `model()` family functions;
- pass as it is for built-in types.
The proposed conversion function covers one of the possible ways. How about add
one more convertion? Something like:
```
template <typename T>
Array protobuf(const google::protobuf::RepeatedPtrField<T>& repeated,
const lambda::function<JSON::Object>(const T&)>& converter)
{
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(converter(elem));
}
return array;
}
```
Then the snippet above could be rewritten as:
```
object.values["network_infos"] =
std::move(JSON::protobuf(status.network_infos(), [](const NetworkInfo& info) {
return model(info); });
```
A further improvement would be to accept any iterable collection, not only
`RepeatedPtrField<>`, for example `hashset`.
What do you think?
- Alexander Rukletsov
On Sept. 27, 2015, 1:34 a.m., Klaus Ma wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/38342/
> -----------------------------------------------------------
>
> (Updated Sept. 27, 2015, 1:34 a.m.)
>
>
> Review request for mesos, Alexander Rukletsov, Michael Park, and Jan Schlicht.
>
>
> Bugs: MESOS-3405
> https://issues.apache.org/jira/browse/MESOS-3405
>
>
> Repository: mesos
>
>
> 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.
>
>
> Diffs
> -----
>
> 3rdparty/libprocess/3rdparty/stout/include/stout/protobuf.hpp 2285ce9
> 3rdparty/libprocess/3rdparty/stout/tests/protobuf_tests.cpp 68328a2
> 3rdparty/libprocess/3rdparty/stout/tests/protobuf_tests.pb.h 8ebb798
> 3rdparty/libprocess/3rdparty/stout/tests/protobuf_tests.pb.cc 34eb6d0
> 3rdparty/libprocess/3rdparty/stout/tests/protobuf_tests.proto 920f5c9
>
> Diff: https://reviews.apache.org/r/38342/diff/
>
>
> Testing
> -------
>
> cd 3rdparty/libprocess/3rdparty/stout
> ./boostrap
> ./configure
> make
>
>
> Thanks,
>
> Klaus Ma
>
>