diff --git a/src/encoder.cc b/src/encoder.cc index a3cbccc..b791e40 100644 --- a/src/encoder.cc +++ b/src/encoder.cc @@ -149,8 +149,8 @@ namespace Encoder { } bool EncodeObject(Local value, DBusMessageIter *iter, - const DBusSignatureIter *siter, - const DBusSignatureIter *concreteSiter) { + DBusSignatureIter *siter, + DBusSignatureIter *concreteSiter) { Nan::HandleScope scope; int type; @@ -167,6 +167,17 @@ namespace Encoder { // Get type of current value type = dbus_signature_iter_get_current_type(siter); + if (type != DBUS_TYPE_ARRAY && value->IsArray()) { + Local arrayData = Local::Cast(value); + for (unsigned int i = 0; i < arrayData->Length(); ++i) { + Local arrayItem = arrayData->Get(i); + if (!EncodeObject(arrayItem, iter, siter, concreteSiter)) + return false; + dbus_signature_iter_next(siter); + } + return true; + } + switch (type) { case DBUS_TYPE_INVALID: { printf("Invalid type\n"); @@ -456,9 +467,9 @@ namespace Encoder { } } - return true; } + } diff --git a/src/encoder.h b/src/encoder.h index 6a68285..54cf25c 100644 --- a/src/encoder.h +++ b/src/encoder.h @@ -21,7 +21,7 @@ namespace Encoder { // elements will be inferred based on the V8 type (and, in the case of numbers, // their values) bool EncodeObject(Local value, DBusMessageIter *iter, - const DBusSignatureIter *siter, const DBusSignatureIter *concreteSiter = nullptr); + DBusSignatureIter *siter, DBusSignatureIter *concreteSiter = nullptr); } #endif