mirror of https://github.com/nymea/nymea.git
Merge PR #481: Add flag handling methods for the JSON RPC handler.
commit
77218553ae
|
|
@ -58,7 +58,7 @@ DeviceHandler::DeviceHandler(QObject *parent) :
|
|||
registerEnum<Device::DeviceSetupStatus>();
|
||||
registerEnum<Thing::ThingSetupStatus>();
|
||||
registerEnum<DeviceClass::SetupMethod>();
|
||||
registerEnum<DeviceClass::CreateMethod, DeviceClass::CreateMethods>();
|
||||
registerFlag<DeviceClass::CreateMethod, DeviceClass::CreateMethods>();
|
||||
registerEnum<Types::Unit>();
|
||||
registerEnum<Types::InputType>();
|
||||
registerEnum<Types::IOType>();
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ IntegrationsHandler::IntegrationsHandler(ThingManager *thingManager, QObject *pa
|
|||
registerEnum<Thing::ThingError>();
|
||||
registerEnum<Thing::ThingSetupStatus>();
|
||||
registerEnum<ThingClass::SetupMethod>();
|
||||
registerEnum<ThingClass::CreateMethod, ThingClass::CreateMethods>();
|
||||
registerFlag<ThingClass::CreateMethod, ThingClass::CreateMethods>();
|
||||
registerEnum<Types::Unit>();
|
||||
registerEnum<Types::InputType>();
|
||||
registerEnum<Types::IOType>();
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Copyright 2013 - 2021, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
|
|
@ -506,6 +506,3 @@ QVariant JsonHandler::unpack(const QMetaObject &metaObject, const QVariant &valu
|
|||
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Copyright 2013 - 2021, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
|
|
@ -76,12 +76,16 @@ public:
|
|||
|
||||
|
||||
template<typename T> static QString enumRef();
|
||||
template<typename T> static QString flagRef();
|
||||
template<typename T> static QString objectRef();
|
||||
static QString objectRef(const QString &objectName);
|
||||
|
||||
template<typename T> static QString enumValueName(T value);
|
||||
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 QVariant::Type basicTypeToVariantType(BasicType basicType);
|
||||
|
||||
|
|
@ -91,7 +95,7 @@ public:
|
|||
|
||||
protected:
|
||||
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, typename ListType> void registerObject();
|
||||
|
|
@ -104,7 +108,6 @@ protected:
|
|||
// Deprecated QString based registerObject
|
||||
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 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>
|
||||
void JsonHandler::registerEnum()
|
||||
void JsonHandler::registerFlag()
|
||||
{
|
||||
registerEnum<Enum>();
|
||||
QMetaEnum metaEnum = QMetaEnum::fromType<Enum>();
|
||||
|
|
@ -205,9 +208,18 @@ template<typename T>
|
|||
QString JsonHandler::enumRef()
|
||||
{
|
||||
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());
|
||||
}
|
||||
|
||||
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>
|
||||
QString JsonHandler::objectRef()
|
||||
{
|
||||
|
|
@ -229,6 +241,34 @@ T JsonHandler::enumNameToValue(const QString &name)
|
|||
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>
|
||||
QVariant JsonHandler::pack(const T &value) const
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue