You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2015/08/18 02:11:32 UTC
[3/3] mesos git commit: Updated Proto <-> JSON conversion to use
base64 for 'bytes' fields.
Updated Proto <-> JSON conversion to use base64 for 'bytes' fields.
Review: https://reviews.apache.org/r/37558
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/584301f9
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/584301f9
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/584301f9
Branch: refs/heads/master
Commit: 584301f9913eed5c281dc574954feabc48402e80
Parents: 1e21d49
Author: Benjamin Mahler <be...@gmail.com>
Authored: Mon Aug 17 15:12:04 2015 -0700
Committer: Benjamin Mahler <be...@gmail.com>
Committed: Mon Aug 17 17:05:25 2015 -0700
----------------------------------------------------------------------
.../3rdparty/stout/include/stout/protobuf.hpp | 47 +++++++++++++-------
.../3rdparty/stout/tests/protobuf_tests.cpp | 4 +-
2 files changed, 34 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/584301f9/3rdparty/libprocess/3rdparty/stout/include/stout/protobuf.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/stout/include/stout/protobuf.hpp b/3rdparty/libprocess/3rdparty/stout/include/stout/protobuf.hpp
index 82eae87..57d5fdf 100644
--- a/3rdparty/libprocess/3rdparty/stout/include/stout/protobuf.hpp
+++ b/3rdparty/libprocess/3rdparty/stout/include/stout/protobuf.hpp
@@ -24,24 +24,21 @@
#include <string>
#include <vector>
-#include <boost/lexical_cast.hpp>
-
-#include <glog/logging.h>
-
#include <google/protobuf/descriptor.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>
#include <google/protobuf/io/zero_copy_stream_impl.h>
-#include "abort.hpp"
-#include "error.hpp"
-#include "json.hpp"
-#include "none.hpp"
-#include "os.hpp"
-#include "result.hpp"
-#include "stringify.hpp"
-#include "try.hpp"
+#include <stout/abort.hpp>
+#include <stout/base64.hpp>
+#include <stout/error.hpp>
+#include <stout/json.hpp>
+#include <stout/none.hpp>
+#include <stout/os.hpp>
+#include <stout/result.hpp>
+#include <stout/stringify.hpp>
+#include <stout/try.hpp>
namespace protobuf {
@@ -345,13 +342,27 @@ struct Parser : boost::static_visitor<Try<Nothing> >
{
switch (field->type()) {
case google::protobuf::FieldDescriptor::TYPE_STRING:
- case google::protobuf::FieldDescriptor::TYPE_BYTES:
if (field->is_repeated()) {
reflection->AddString(message, field, string.value);
} else {
reflection->SetString(message, field, string.value);
}
break;
+ case google::protobuf::FieldDescriptor::TYPE_BYTES: {
+ Try<std::string> decode = base64::decode(string.value);
+
+ if (decode.isError()) {
+ return Error("Failed to base64 decode bytes field"
+ " '" + field->name() + "': " + decode.error());
+ }
+
+ if (field->is_repeated()) {
+ reflection->AddString(message, field, decode.get());
+ } else {
+ reflection->SetString(message, field, decode.get());
+ }
+ break;
+ }
case google::protobuf::FieldDescriptor::TYPE_ENUM: {
const google::protobuf::EnumValueDescriptor* descriptor =
field->enum_type()->FindValueByName(string.value);
@@ -638,10 +649,13 @@ struct Protobuf
}
break;
case google::protobuf::FieldDescriptor::TYPE_STRING:
- case google::protobuf::FieldDescriptor::TYPE_BYTES:
array.values.push_back(JSON::String(
reflection->GetRepeatedString(message, field, i)));
break;
+ case google::protobuf::FieldDescriptor::TYPE_BYTES:
+ array.values.push_back(JSON::String(base64::encode(
+ reflection->GetRepeatedString(message, field, i))));
+ break;
case google::protobuf::FieldDescriptor::TYPE_MESSAGE:
array.values.push_back(Protobuf(
reflection->GetRepeatedMessage(message, field, i)));
@@ -698,10 +712,13 @@ struct Protobuf
}
break;
case google::protobuf::FieldDescriptor::TYPE_STRING:
- case google::protobuf::FieldDescriptor::TYPE_BYTES:
object.values[field->name()] =
JSON::String(reflection->GetString(message, field));
break;
+ case google::protobuf::FieldDescriptor::TYPE_BYTES:
+ object.values[field->name()] = JSON::String(
+ base64::encode(reflection->GetString(message, field)));
+ break;
case google::protobuf::FieldDescriptor::TYPE_MESSAGE:
object.values[field->name()] =
Protobuf(reflection->GetMessage(message, field));
http://git-wip-us.apache.org/repos/asf/mesos/blob/584301f9/3rdparty/libprocess/3rdparty/stout/tests/protobuf_tests.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/stout/tests/protobuf_tests.cpp b/3rdparty/libprocess/3rdparty/stout/tests/protobuf_tests.cpp
index 2b98945..c56d6a3 100644
--- a/3rdparty/libprocess/3rdparty/stout/tests/protobuf_tests.cpp
+++ b/3rdparty/libprocess/3rdparty/stout/tests/protobuf_tests.cpp
@@ -81,7 +81,7 @@ TEST(ProtobufTest, JSON)
string expected = strings::remove(
"{"
" \"b\": true,"
- " \"bytes\": \"bytes\","
+ " \"bytes\": \"Ynl0ZXM=\","
" \"d\": 1,"
" \"e\": \"ONE\","
" \"f\": 1,"
@@ -90,7 +90,7 @@ TEST(ProtobufTest, JSON)
" \"nested\": { \"str\": \"nested\"},"
" \"optional_default\": 42,"
" \"repeated_bool\": [true],"
- " \"repeated_bytes\": [\"repeated_bytes\"],"
+ " \"repeated_bytes\": [\"cmVwZWF0ZWRfYnl0ZXM=\"],"
" \"repeated_double\": [1, 2],"
" \"repeated_enum\": [\"TWO\"],"
" \"repeated_float\": [1],"