diff options
author | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-24 20:37:18 +0000 |
---|---|---|
committer | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-24 20:37:18 +0000 |
commit | 6e04d17161b8d53770979fb5a451da8174e255c6 (patch) | |
tree | 3ca941138578159e4059e52f94a105c1242ed609 /dbus/values_util.cc | |
parent | ffd60e434c0dff91d8cb9251c08d901b12346b2a (diff) | |
download | chromium_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.cc | 61 |
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 |