diff --git a/libnymea-core/jsonrpc/jsonvalidator.cpp b/libnymea-core/jsonrpc/jsonvalidator.cpp index 3d134042..01598ea9 100644 --- a/libnymea-core/jsonrpc/jsonvalidator.cpp +++ b/libnymea-core/jsonrpc/jsonvalidator.cpp @@ -262,7 +262,7 @@ JsonValidator::Result JsonValidator::validateEntry(const QVariant &value, const if (definition.type() == QVariant::Map) { if (value.type() != QVariant::Map) { - return Result(false, "Invalid value. Expected a map bug received: " + value.toString()); + return Result(false, "Invalid value. Expected a map but received: " + value.toString()); } return validateMap(value.toMap(), definition.toMap(), api, openMode); } diff --git a/libnymea/jsonrpc/jsonhandler.cpp b/libnymea/jsonrpc/jsonhandler.cpp index f1852f6e..5233618b 100644 --- a/libnymea/jsonrpc/jsonhandler.cpp +++ b/libnymea/jsonrpc/jsonhandler.cpp @@ -231,9 +231,8 @@ void JsonHandler::registerObject(const QMetaObject &metaObject) m_metaObjects.insert(className, metaObject); } -void JsonHandler::registerObject(const QMetaObject &metaObject, const QMetaObject &listMetaObject) +void JsonHandler::registerList(const QMetaObject &listMetaObject, const QMetaObject &metaObject) { - registerObject(metaObject); QString listTypeName = QString(listMetaObject.className()).split("::").last(); QString objectTypeName = QString(metaObject.className()).split("::").last(); m_objects.insert(listTypeName, QVariantList() << QVariant(QString("$ref:%1").arg(objectTypeName))); @@ -245,6 +244,12 @@ void JsonHandler::registerObject(const QMetaObject &metaObject, const QMetaObjec Q_ASSERT_X(listMetaObject.indexOfMethod("put(QVariant)") >= 0, "JsonHandler", QString("List type %1 does not implement \"Q_INVOKABLE void put(QVariant variant)\" method!").arg(listTypeName).toUtf8()); } +void JsonHandler::registerObject(const QMetaObject &metaObject, const QMetaObject &listMetaObject) +{ + registerObject(metaObject); + registerList(listMetaObject, metaObject); +} + QVariant JsonHandler::pack(const QMetaObject &metaObject, const void *value) const { QString className = QString(metaObject.className()).split("::").last(); diff --git a/libnymea/jsonrpc/jsonhandler.h b/libnymea/jsonrpc/jsonhandler.h index c60e75ef..aa0963c3 100644 --- a/libnymea/jsonrpc/jsonhandler.h +++ b/libnymea/jsonrpc/jsonhandler.h @@ -98,7 +98,11 @@ protected: template void registerEnum(); template void registerFlag(); + // Registers the given object template void registerObject(); + // Registers the given list type object as a container for the given object type, without registering the object type itself + template void registerList(); + // Registers an object and its list type object template void registerObject(); template void registerUncreatableObject(); @@ -117,6 +121,7 @@ protected: private: void registerObject(const QMetaObject &metaObject); + void registerList(const QMetaObject &listObject, const QMetaObject &metaObject); void registerObject(const QMetaObject &metaObject, const QMetaObject &listMetaObject); QVariant pack(const QMetaObject &metaObject, const void *gadget) const; @@ -168,6 +173,15 @@ void JsonHandler::registerObject() registerObject(metaObject); } +template +void JsonHandler::registerList() +{ + qRegisterMetaType(); + QMetaObject metaObject = ObjectType::staticMetaObject; + QMetaObject listMetaObject = ListType::staticMetaObject; + registerList(listMetaObject, metaObject); +} + template void JsonHandler::registerObject() {