mirror of https://github.com/nymea/nymea.git
Merge PR #591: Allow registering list types without their contained objects on JSONRPC
commit
6cce82c088
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -98,7 +98,11 @@ protected:
|
|||
template <typename Enum> void registerEnum();
|
||||
template <typename Enum, typename Flags> void registerFlag();
|
||||
|
||||
// Registers the given object
|
||||
template <typename ObjectType> void registerObject();
|
||||
// Registers the given list type object as a container for the given object type, without registering the object type itself
|
||||
template <typename ListType, typename ObjectType> void registerList();
|
||||
// Registers an object and its list type object
|
||||
template <typename ObjectType, typename ListType> void registerObject();
|
||||
|
||||
template <typename ObjectType> 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<typename ListType, typename ObjectType>
|
||||
void JsonHandler::registerList()
|
||||
{
|
||||
qRegisterMetaType<ListType>();
|
||||
QMetaObject metaObject = ObjectType::staticMetaObject;
|
||||
QMetaObject listMetaObject = ListType::staticMetaObject;
|
||||
registerList(listMetaObject, metaObject);
|
||||
}
|
||||
|
||||
template<typename ObjectType, typename ListType>
|
||||
void JsonHandler::registerObject()
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue