libchromeos: Add generic DBus data serialization/deserialization
Provide generic methods to write arbitrary C++ data to D-Bus
message buffers and read it back. Implement generic conatainer
support such as std::vector, std::map, std::pair to support
D-Bus ARRAY, DICT, STRUCT data types. Also using chromeos::Any
as a D-Bus VARIANT type.
Added a bunch of unit tests for dbus_utils.
BUG=None
TEST=FEATURES=test emerge-link libchromeos
FEATURES=test emerge-link buffet
Change-Id: Ic445e11fb2e65c8243df183c6e93c4b3cb881dc8
Reviewed-on: https://chromium-review.googlesource.com/213923
Reviewed-by: Ben Chan <benchan@chromium.org>
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index 7c0c454..c42e484 100644
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -12,6 +12,7 @@
#include <base/memory/ref_counted.h>
#include <base/memory/scoped_ptr.h>
#include <base/values.h>
+#include <chromeos/any.h>
#include <chromeos/data_encoding.h>
#include <chromeos/dbus_utils.h>
#include <dbus/bus.h>
@@ -151,16 +152,15 @@
if (!args.empty()) {
auto key_values = chromeos::data_encoding::WebParamsDecode(args.front());
for (const auto& pair : key_values) {
- params.insert(std::make_pair(
- pair.first, std::unique_ptr<base::Value>(
- base::Value::CreateStringValue(pair.second))));
+ params.insert(std::make_pair(pair.first, chromeos::Any(pair.second)));
}
}
dbus::MethodCall method_call(
kManagerInterface, kManagerStartRegisterDevice);
dbus::MessageWriter writer(&method_call);
- chromeos::dbus_utils::AppendValueToWriter(&writer, params);
+ CHECK(chromeos::dbus_utils::AppendValueToWriter(&writer, params))
+ << "Failed to send the parameters over D-Bus";
static const int timeout_ms = 3000;
scoped_ptr<dbus::Response> response(