diff options
author | Peter Qiu <zqiu@google.com> | 2015-08-25 11:54:34 -0700 |
---|---|---|
committer | Peter Qiu <zqiu@google.com> | 2015-08-25 12:02:01 -0700 |
commit | 2d4e68c1666d841d00ca60404f30d604cb67a479 (patch) | |
tree | 476d561f87b8d9ba03a006138aec262f30fbc8fd | |
parent | 67cf363132ddeade1cfdd2965787abc37174f18a (diff) | |
download | libchromeos-2d4e68c1666d841d00ca60404f30d604cb67a479.tar.gz |
libchromeos: dbus: support additional types for variant deserialization
This is needed for supporting cellular modem proxies in shill.
While there, use std::tuple instead of std::pair for deserializing struct
variant type.
BUG=chromium:517680
TEST=build libchromeos
TEST=Run network_3GSmokeTest on device with shill using libchromeos dbus
Change-Id: I6c138ee4a52c2655143929c70d6958d6aff3b05f
-rw-r--r-- | chromeos/dbus/data_serialization.cc | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/chromeos/dbus/data_serialization.cc b/chromeos/dbus/data_serialization.cc index 00ad723..f57697b 100644 --- a/chromeos/dbus/data_serialization.cc +++ b/chromeos/dbus/data_serialization.cc @@ -219,6 +219,19 @@ bool PopArrayValueFromReader(dbus::MessageReader* reader, else if (signature == "a{sa{sv}}") return PopTypedMapFromReader< std::string, chromeos::VariantDictionary>(reader, value); + else if (signature == "a{say}") + return PopTypedMapFromReader< + std::string, std::vector<uint8_t>>(reader, value); + else if (signature == "a{uv}") + return PopTypedMapFromReader<uint32_t, chromeos::Any>(reader, value); + else if (signature == "a(su)") + return PopTypedArrayFromReader< + std::tuple<std::string, uint32_t>>(reader, value); + else if (signature == "a{uu}") + return PopTypedMapFromReader<uint32_t, uint32_t>(reader, value); + else if (signature == "a(uu)") + return PopTypedArrayFromReader< + std::tuple<uint32_t, uint32_t>>(reader, value); // When a use case for particular array signature is found, feel free // to add handing for it here. @@ -234,10 +247,15 @@ bool PopStructValueFromReader(dbus::MessageReader* reader, chromeos::Any* value) { std::string signature = reader->GetDataSignature(); if (signature == "(ii)") - return PopTypedValueFromReader<std::pair<int, int>>(reader, value); + return PopTypedValueFromReader<std::tuple<int, int>>(reader, value); else if (signature == "(ss)") - return PopTypedValueFromReader<std::pair<std::string, std::string>>(reader, - value); + return PopTypedValueFromReader<std::tuple<std::string, std::string>>(reader, + value); + else if (signature == "(ub)") + return PopTypedValueFromReader<std::tuple<uint32_t, bool>>(reader, value); + else if (signature == "(uu)") + return PopTypedValueFromReader<std::tuple<uint32_t, uint32_t>>(reader, + value); // When a use case for particular struct signature is found, feel free // to add handing for it here. |