summaryrefslogtreecommitdiffstats
path: root/dbus/values_util.cc
diff options
context:
space:
mode:
authorhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-24 20:37:18 +0000
committerhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-24 20:37:18 +0000
commit6e04d17161b8d53770979fb5a451da8174e255c6 (patch)
tree3ca941138578159e4059e52f94a105c1242ed609 /dbus/values_util.cc
parentffd60e434c0dff91d8cb9251c08d901b12346b2a (diff)
downloadchromium_src-6e04d17161b8d53770979fb5a451da8174e255c6.zip
chromium_src-6e04d17161b8d53770979fb5a451da8174e255c6.tar.gz
chromium_src-6e04d17161b8d53770979fb5a451da8174e255c6.tar.bz2
Add dbus::AppendBasicTypeValueData
BUG=chromium-os:16557 TEST=dbus_unittests --gtest_filter="ValuesUtilTest.Append*" Review URL: http://codereview.chromium.org/9826044 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128771 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'dbus/values_util.cc')
-rw-r--r--dbus/values_util.cc61
1 files changed, 61 insertions, 0 deletions
diff --git a/dbus/values_util.cc b/dbus/values_util.cc
index b78638d..e341ac2 100644
--- a/dbus/values_util.cc
+++ b/dbus/values_util.cc
@@ -62,6 +62,27 @@ bool PopDictionaryEntries(MessageReader* reader,
return true;
}
+// Gets the D-Bus type signature for the value.
+std::string GetTypeSignature(const base::Value& value) {
+ switch (value.GetType()) {
+ case base::Value::TYPE_BOOLEAN:
+ return "b";
+ case base::Value::TYPE_INTEGER:
+ return "i";
+ case base::Value::TYPE_DOUBLE:
+ return "d";
+ case base::Value::TYPE_STRING:
+ return "s";
+ case base::Value::TYPE_BINARY:
+ return "ay";
+ case base::Value::TYPE_DICTIONARY:
+ return "a{sv}";
+ default:
+ DLOG(ERROR) << "Unexpected type " << value.GetType();
+ return "";
+ }
+}
+
} // namespace
Value* PopDataAsValue(MessageReader* reader) {
@@ -182,4 +203,44 @@ Value* PopDataAsValue(MessageReader* reader) {
return result;
}
+void AppendBasicTypeValueData(MessageWriter* writer, const base::Value& value) {
+ switch (value.GetType()) {
+ case base::Value::TYPE_BOOLEAN: {
+ bool bool_value = false;
+ value.GetAsBoolean(&bool_value);
+ writer->AppendBool(bool_value);
+ break;
+ }
+ case base::Value::TYPE_INTEGER: {
+ int int_value = 0;
+ value.GetAsInteger(&int_value);
+ writer->AppendInt32(int_value);
+ break;
+ }
+ case base::Value::TYPE_DOUBLE: {
+ double double_value = 0;
+ value.GetAsDouble(&double_value);
+ writer->AppendDouble(double_value);
+ break;
+ }
+ case base::Value::TYPE_STRING: {
+ std::string string_value;
+ value.GetAsString(&string_value);
+ writer->AppendString(string_value);
+ break;
+ }
+ default:
+ DLOG(ERROR) << "Unexpected type " << value.GetType();
+ break;
+ }
+}
+
+void AppendBasicTypeValueDataAsVariant(MessageWriter* writer,
+ const base::Value& value) {
+ MessageWriter sub_writer(NULL);
+ writer->OpenVariant(GetTypeSignature(value), &sub_writer);
+ AppendBasicTypeValueData(&sub_writer, value);
+ writer->CloseContainer(&sub_writer);
+}
+
} // namespace dbus