mirror of https://github.com/nymea/nymea.git
Add flag handling methods for the JSON RPC handler.
parent
249393241c
commit
1fc896def2
|
|
@ -58,7 +58,7 @@ DeviceHandler::DeviceHandler(QObject *parent) :
|
||||||
registerEnum<Device::DeviceSetupStatus>();
|
registerEnum<Device::DeviceSetupStatus>();
|
||||||
registerEnum<Thing::ThingSetupStatus>();
|
registerEnum<Thing::ThingSetupStatus>();
|
||||||
registerEnum<DeviceClass::SetupMethod>();
|
registerEnum<DeviceClass::SetupMethod>();
|
||||||
registerEnum<DeviceClass::CreateMethod, DeviceClass::CreateMethods>();
|
registerFlag<DeviceClass::CreateMethod, DeviceClass::CreateMethods>();
|
||||||
registerEnum<Types::Unit>();
|
registerEnum<Types::Unit>();
|
||||||
registerEnum<Types::InputType>();
|
registerEnum<Types::InputType>();
|
||||||
registerEnum<Types::IOType>();
|
registerEnum<Types::IOType>();
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ IntegrationsHandler::IntegrationsHandler(ThingManager *thingManager, QObject *pa
|
||||||
registerEnum<Thing::ThingError>();
|
registerEnum<Thing::ThingError>();
|
||||||
registerEnum<Thing::ThingSetupStatus>();
|
registerEnum<Thing::ThingSetupStatus>();
|
||||||
registerEnum<ThingClass::SetupMethod>();
|
registerEnum<ThingClass::SetupMethod>();
|
||||||
registerEnum<ThingClass::CreateMethod, ThingClass::CreateMethods>();
|
registerFlag<ThingClass::CreateMethod, ThingClass::CreateMethods>();
|
||||||
registerEnum<Types::Unit>();
|
registerEnum<Types::Unit>();
|
||||||
registerEnum<Types::InputType>();
|
registerEnum<Types::InputType>();
|
||||||
registerEnum<Types::IOType>();
|
registerEnum<Types::IOType>();
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
*
|
*
|
||||||
* Copyright 2013 - 2020, nymea GmbH
|
* Copyright 2013 - 2021, nymea GmbH
|
||||||
* Contact: contact@nymea.io
|
* Contact: contact@nymea.io
|
||||||
*
|
*
|
||||||
* This file is part of nymea.
|
* This file is part of nymea.
|
||||||
|
|
@ -506,6 +506,3 @@ QVariant JsonHandler::unpack(const QMetaObject &metaObject, const QVariant &valu
|
||||||
|
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
*
|
*
|
||||||
* Copyright 2013 - 2020, nymea GmbH
|
* Copyright 2013 - 2021, nymea GmbH
|
||||||
* Contact: contact@nymea.io
|
* Contact: contact@nymea.io
|
||||||
*
|
*
|
||||||
* This file is part of nymea.
|
* This file is part of nymea.
|
||||||
|
|
@ -76,12 +76,16 @@ public:
|
||||||
|
|
||||||
|
|
||||||
template<typename T> static QString enumRef();
|
template<typename T> static QString enumRef();
|
||||||
|
template<typename T> static QString flagRef();
|
||||||
template<typename T> static QString objectRef();
|
template<typename T> static QString objectRef();
|
||||||
static QString objectRef(const QString &objectName);
|
static QString objectRef(const QString &objectName);
|
||||||
|
|
||||||
template<typename T> static QString enumValueName(T value);
|
template<typename T> static QString enumValueName(T value);
|
||||||
template<typename T> static T enumNameToValue(const QString &name);
|
template<typename T> static T enumNameToValue(const QString &name);
|
||||||
|
|
||||||
|
template<typename T> static QStringList flagValueNames(T value);
|
||||||
|
template<typename T> static T flagNamesToValue(const QStringList &names);
|
||||||
|
|
||||||
static BasicType variantTypeToBasicType(QVariant::Type variantType);
|
static BasicType variantTypeToBasicType(QVariant::Type variantType);
|
||||||
static QVariant::Type basicTypeToVariantType(BasicType basicType);
|
static QVariant::Type basicTypeToVariantType(BasicType basicType);
|
||||||
|
|
||||||
|
|
@ -91,7 +95,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
template <typename Enum> void registerEnum();
|
template <typename Enum> void registerEnum();
|
||||||
template <typename Enum, typename Flags> void registerEnum();
|
template <typename Enum, typename Flags> void registerFlag();
|
||||||
|
|
||||||
template <typename ObjectType> void registerObject();
|
template <typename ObjectType> void registerObject();
|
||||||
template <typename ObjectType, typename ListType> void registerObject();
|
template <typename ObjectType, typename ListType> void registerObject();
|
||||||
|
|
@ -104,7 +108,6 @@ protected:
|
||||||
// Deprecated QString based registerObject
|
// Deprecated QString based registerObject
|
||||||
void registerObject(const QString &name, const QVariantMap &object);
|
void registerObject(const QString &name, const QVariantMap &object);
|
||||||
|
|
||||||
|
|
||||||
void registerMethod(const QString &name, const QString &description, const QVariantMap ¶ms, const QVariantMap &returns, const QString &deprecationInfo = QString());
|
void registerMethod(const QString &name, const QString &description, const QVariantMap ¶ms, const QVariantMap &returns, const QString &deprecationInfo = QString());
|
||||||
void registerNotification(const QString &name, const QString &description, const QVariantMap ¶ms, const QString &deprecationInfo = QString());
|
void registerNotification(const QString &name, const QString &description, const QVariantMap ¶ms, const QString &deprecationInfo = QString());
|
||||||
|
|
||||||
|
|
@ -146,7 +149,7 @@ void JsonHandler::registerEnum()
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Enum, typename Flags>
|
template<typename Enum, typename Flags>
|
||||||
void JsonHandler::registerEnum()
|
void JsonHandler::registerFlag()
|
||||||
{
|
{
|
||||||
registerEnum<Enum>();
|
registerEnum<Enum>();
|
||||||
QMetaEnum metaEnum = QMetaEnum::fromType<Enum>();
|
QMetaEnum metaEnum = QMetaEnum::fromType<Enum>();
|
||||||
|
|
@ -205,9 +208,18 @@ template<typename T>
|
||||||
QString JsonHandler::enumRef()
|
QString JsonHandler::enumRef()
|
||||||
{
|
{
|
||||||
QMetaEnum metaEnum = QMetaEnum::fromType<T>();
|
QMetaEnum metaEnum = QMetaEnum::fromType<T>();
|
||||||
|
Q_ASSERT_X(!metaEnum.isFlag(), "JsonHandler", QString("The given type reference %1 is a flag. Please use flagRef() instead.").arg(metaEnum.name()).toUtf8());
|
||||||
return QString("$ref:%1").arg(metaEnum.name());
|
return QString("$ref:%1").arg(metaEnum.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
QString JsonHandler::flagRef()
|
||||||
|
{
|
||||||
|
QMetaEnum metaFlag = QMetaEnum::fromType<T>();
|
||||||
|
Q_ASSERT_X(metaFlag.isFlag(), "JsonHandler", QString("The given type reference %1 is not a flag.").arg(metaFlag.name()).toUtf8());
|
||||||
|
return QString("$ref:%1").arg(metaFlag.name());
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
QString JsonHandler::objectRef()
|
QString JsonHandler::objectRef()
|
||||||
{
|
{
|
||||||
|
|
@ -229,6 +241,34 @@ T JsonHandler::enumNameToValue(const QString &name)
|
||||||
return static_cast<T>(metaEnum.keyToValue(name.toUtf8()));
|
return static_cast<T>(metaEnum.keyToValue(name.toUtf8()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
QStringList JsonHandler::flagValueNames(T value)
|
||||||
|
{
|
||||||
|
QMetaEnum metaFlag = QMetaEnum::fromType<T>();
|
||||||
|
Q_ASSERT_X(metaFlag.isFlag(), "JsonHandler", QString("The given template type %1 is not a flag.").arg(metaFlag.name()).toUtf8());
|
||||||
|
QStringList names;
|
||||||
|
for (int i = 0; i < metaFlag.keyCount(); i++) {
|
||||||
|
if ((metaFlag.value(i) & value) > 0) {
|
||||||
|
names.append(metaFlag.key(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
T JsonHandler::flagNamesToValue(const QStringList &names)
|
||||||
|
{
|
||||||
|
QMetaEnum metaFlag = QMetaEnum::fromType<T>();
|
||||||
|
Q_ASSERT_X(metaFlag.isFlag(), "JsonHandler", QString("The given template type %1 is not a flag.").arg(metaFlag.name()).toUtf8());
|
||||||
|
T flag;
|
||||||
|
foreach (const QString &name, names) {
|
||||||
|
bool keyOk;
|
||||||
|
flag |= metaFlag.keyToValue(name.toUtf8(), &keyOk);
|
||||||
|
Q_ASSERT_X(keyOk, "JsonHandler", QString("The given enum value for the flag %1 is not ok.").arg(metaFlag.name()).toUtf8());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
QVariant JsonHandler::pack(const T &value) const
|
QVariant JsonHandler::pack(const T &value) const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue