![]() |
libQuotient
A Qt library for building matrix clients
|
Enabling structure for conversion between a given enum and JSON. More...
#include <quotient_common.h>

Enabling structure for conversion between a given enum and JSON.
Providing this structure in a way that satisfies either Serializable_Enum or Serializable_Flag enables de/serialisation using fromJson() and toJson() for the respective enum. See commented out code in the definition for an idea what should be there to satisfy either concept. strings has the list of JSON representations for respective enumerators. defaultValue should have the enumerator used when the string coming from JSON cannot be found in strings, or when the JSON value is not even a string. isFlag defines whether the enumeration should be treated as a collection of flag values (usually, such enum also has a QFlags counterpart type defined with Q_FLAG, Q_FLAG_NS, QUO_DECLARE_FLAGS or QUO_DECLARE_FLAGS_NS). isFlag can either be false or completely omitted from the definition for non-flag enumerations.
The rules to define enumerations and their string representations are different for non-flag and flag enumerations - see the respective note blocks below. These cannot be checked at compile-time, breaking them will lead to either assertion failures or incorrect conversion.
EnumT must not have gaps in enumerators, or strings has to match those gaps (i.e., if EnumT is defined as { Value1 = 1, Value2 = 3, Value3 = 5 } then strings should be defined as { "", "Value1", "", "Value2", "", "Value3" } (mind the gap at value 0, in particular). Although it is allowed to have enumerations based EnumT must follow the power-of-two sequence starting from 1, so exactly 1,2,4,8,16 and so on. Having gaps is allowed but the same rule as for non-flag enumerations applies: strings has to reflect this gap, skipping an array item. As of now, there's no way to encode and decode the value of zero (no flags set) or a combination of flags (i.e. Flag4|Flag16).In most cases you can use facility macros, QUO_META_ENUM and QUO_META_FLAG, instead of writing all the boilerplate yourself. The enumeration can be defined in any namespace but the macros are only valid when put into namespace Quotient. Clients are free to write namespace Quotient { QUO_META_ENUM(...) } for that matter.
Definition at line 85 of file quotient_common.h.