Allow registering list types without their contained objects on JSONRPC
This commit is contained in:
parent
3af830e559
commit
0dee8d44de
@ -262,7 +262,7 @@ JsonValidator::Result JsonValidator::validateEntry(const QVariant &value, const
|
|||||||
|
|
||||||
if (definition.type() == QVariant::Map) {
|
if (definition.type() == QVariant::Map) {
|
||||||
if (value.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);
|
return validateMap(value.toMap(), definition.toMap(), api, openMode);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -231,9 +231,8 @@ void JsonHandler::registerObject(const QMetaObject &metaObject)
|
|||||||
m_metaObjects.insert(className, 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 listTypeName = QString(listMetaObject.className()).split("::").last();
|
||||||
QString objectTypeName = QString(metaObject.className()).split("::").last();
|
QString objectTypeName = QString(metaObject.className()).split("::").last();
|
||||||
m_objects.insert(listTypeName, QVariantList() << QVariant(QString("$ref:%1").arg(objectTypeName)));
|
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());
|
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
|
QVariant JsonHandler::pack(const QMetaObject &metaObject, const void *value) const
|
||||||
{
|
{
|
||||||
QString className = QString(metaObject.className()).split("::").last();
|
QString className = QString(metaObject.className()).split("::").last();
|
||||||
|
|||||||
@ -98,7 +98,11 @@ protected:
|
|||||||
template <typename Enum> void registerEnum();
|
template <typename Enum> void registerEnum();
|
||||||
template <typename Enum, typename Flags> void registerFlag();
|
template <typename Enum, typename Flags> void registerFlag();
|
||||||
|
|
||||||
|
// Registers the given object
|
||||||
template <typename ObjectType> void registerObject();
|
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, typename ListType> void registerObject();
|
||||||
|
|
||||||
template <typename ObjectType> void registerUncreatableObject();
|
template <typename ObjectType> void registerUncreatableObject();
|
||||||
@ -117,6 +121,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void registerObject(const QMetaObject &metaObject);
|
void registerObject(const QMetaObject &metaObject);
|
||||||
|
void registerList(const QMetaObject &listObject, const QMetaObject &metaObject);
|
||||||
void registerObject(const QMetaObject &metaObject, const QMetaObject &listMetaObject);
|
void registerObject(const QMetaObject &metaObject, const QMetaObject &listMetaObject);
|
||||||
|
|
||||||
QVariant pack(const QMetaObject &metaObject, const void *gadget) const;
|
QVariant pack(const QMetaObject &metaObject, const void *gadget) const;
|
||||||
@ -168,6 +173,15 @@ void JsonHandler::registerObject()
|
|||||||
registerObject(metaObject);
|
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>
|
template<typename ObjectType, typename ListType>
|
||||||
void JsonHandler::registerObject()
|
void JsonHandler::registerObject()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user