19#include <private/qglobal_p.h>
21#include "QtCore/qplugin.h"
22#include "QtCore/qcborvalue.h"
23#include "QtCore/qcbormap.h"
27enum class QtPluginMetaDataKeys {
39#define QT_PLUGIN_FOREACH_METADATA(F)
40 F(QtPluginMetaDataKeys::IID, "IID", "Plugin's Interface ID")
41 F(QtPluginMetaDataKeys::ClassName, "className", "Plugin class name")
42 F(QtPluginMetaDataKeys::MetaData, "MetaData", "Other meta data")
43 F(QtPluginMetaDataKeys::URI, "URI", "Plugin URI")
45 F(QtPluginMetaDataKeys::QtVersion, "version", "Qt version")
46 F(QtPluginMetaDataKeys::Requirements, "archlevel", "Architectural level")
47 F(QtPluginMetaDataKeys::IsDebug, "debug", "Debug-mode plugin")
51struct DecodedArchRequirements
55 friend constexpr bool operator==(DecodedArchRequirements r1, DecodedArchRequirements r2)
57 return r1.level == r2.level && r1.isDebug == r2.isDebug;
61static constexpr DecodedArchRequirements decodeVersion0ArchRequirements(quint8 value)
64 DecodedArchRequirements r = {};
76static_assert(decodeVersion0ArchRequirements(0) == DecodedArchRequirements{ 0,
false });
77static_assert(decodeVersion0ArchRequirements(1) == DecodedArchRequirements{ 0,
true });
79static_assert(decodeVersion0ArchRequirements(2) == DecodedArchRequirements{ 3,
false });
80static_assert(decodeVersion0ArchRequirements(3) == DecodedArchRequirements{ 3,
true });
81static_assert(decodeVersion0ArchRequirements(4) == DecodedArchRequirements{ 4,
false });
82static_assert(decodeVersion0ArchRequirements(5) == DecodedArchRequirements{ 4,
true });
85static constexpr DecodedArchRequirements decodeVersion1ArchRequirements(quint8 value)
87 return { quint8(value & 0x7f),
bool(value & 0x80) };
90static_assert(decodeVersion1ArchRequirements(0) == DecodedArchRequirements{ 0,
false });
91static_assert(decodeVersion1ArchRequirements(0x80) == DecodedArchRequirements{ 0,
true });
93static_assert(decodeVersion1ArchRequirements(1) == DecodedArchRequirements{ 1,
false });
94static_assert(decodeVersion1ArchRequirements(3) == DecodedArchRequirements{ 3,
false});
95static_assert(decodeVersion1ArchRequirements(4) == DecodedArchRequirements{ 4,
false });
96static_assert(decodeVersion1ArchRequirements(0x82) == DecodedArchRequirements{ 2,
true });
97static_assert(decodeVersion1ArchRequirements(0x84) == DecodedArchRequirements{ 4,
true });
113 bool isError()
const {
return !data.isMap(); }
116 bool parse(QByteArrayView input);
117 bool parse(QPluginMetaData metaData)
118 {
return parse(QByteArrayView(
reinterpret_cast<
const char *>(metaData.data), metaData.size)); }