NuriaProject Framework
0.1
The NuriaProject Framework
|
(De-)Serializer for arbitary types based on Nuria::MetaObject. More...
#include <serializer.hpp>
Public Types | |
typedef std::function< void *(MetaObject *, QVariantMap &) > | InstanceCreator |
typedef std::function< MetaObject *(const QByteArray &) > | MetaObjectFinder |
enum | RecursionDepth { NoRecursion = 0, InfiniteRecursion = -3 } |
typedef std::function< bool(QVariant &, int) > | ValueConverter |
Public Member Functions | |
Serializer (MetaObjectFinder metaObjectFinder=defaultMetaObjectFinder, InstanceCreator instanceCreator=defaultInstanceCreator, ValueConverter valueConverter=defaultValueConverter) | |
~Serializer () | |
QVector< QByteArray > | allowedTypes () const |
void * | deserialize (const QVariantMap &data, MetaObject *meta) |
void * | deserialize (const QVariantMap &data, const QByteArray &typeName) |
template<typename T > | |
T * | deserialize (const QVariantMap &data) |
QVector< QByteArray > | exclude () const |
QStringList | failedFields () const |
bool | populate (void *object, MetaObject *meta, const QVariantMap &data) |
bool | populate (void *object, const QByteArray &typeName, const QVariantMap &data) |
template<typename T > | |
bool | populate (T *object, const QVariantMap &data) |
int | recursionDepth () const |
QVariantMap | serialize (void *object, MetaObject *meta) |
QVariantMap | serialize (void *object, const QByteArray &typeName) |
void | setAllowedTypes (const QVector< QByteArray > &list) const |
void | setExclude (const QVector< QByteArray > &list) |
void | setRecursionDepth (int maxDepth) |
Static Public Member Functions | |
static void * | defaultInstanceCreator (MetaObject *metaObject, QVariantMap &data) |
static MetaObject * | defaultMetaObjectFinder (const QByteArray &typeName) |
static bool | defaultValueConverter (QVariant &variant, int toType) |
(De-)Serializer for arbitary types based on Nuria::MetaObject.
This class offers methods to easily (de-)serialize structures from and to QVariantMaps, which can be e.g. (de-)serialized to JSON or other data structures.
If all above steps fail, it'll be noted in the failed list.
If all above steps fail, it'll be noted in the failed list.
typedef std::function< void *(MetaObject * , QVariantMap & ) > Nuria::Serializer::InstanceCreator |
Prototype for a method which uses the two arguments metaObject and data to return a new instance of metaObject. data may be manipulated by the method freely if so desired (E.g. to filter fields or to add or remove fields for other reasons).
If creation fails, nullptr
should be returned to indicate an error.
typedef std::function< MetaObject *(const QByteArray & ) > Nuria::Serializer::MetaObjectFinder |
Prototype for a method which returns the Nuria::MetaObject for a named type. If no type can be found for that name, nullptr
should be returned instead.
typedef std::function< bool(QVariant & , int ) > Nuria::Serializer::ValueConverter |
Prototype for the value converter in the deserialization process. The passed variant is to be converted to the Qt type id as given in the passed integer. Return true
on success.
Nuria::Serializer::Serializer | ( | MetaObjectFinder | metaObjectFinder = defaultMetaObjectFinder , |
InstanceCreator | instanceCreator = defaultInstanceCreator , |
||
ValueConverter | valueConverter = defaultValueConverter |
||
) |
Constructor.
Nuria::Serializer::~Serializer | ( | ) |
Destructor.
QVector< QByteArray > Nuria::Serializer::allowedTypes | ( | ) | const |
Returns the list of allowed data types for serialization. The default list is empty.
|
static |
Default instance creator. It will try to find the constructor of the type with the most arguments which have a key-value-pair in data.
|
static |
Default meta object finder. typeName is expected to be known to the Nuria meta system.
|
static |
Default value converter. Tries QVariant::convert() to convert variant to toType.
void* Nuria::Serializer::deserialize | ( | const QVariantMap & | data, |
MetaObject * | meta | ||
) |
Creates a instance of type meta from data. Elements in data are interpreted to be fields in the object. Elements of data which are not fields in object are silently ignored.
Fields that are of a custom type (E.g. not a POD-type or a Qt type) will be deserialized too if the used MetaObjectFinder and InstanceCreator can handle the type.
If all attempts to create a instance failed, nullptr
is returned.
void* Nuria::Serializer::deserialize | ( | const QVariantMap & | data, |
const QByteArray & | typeName | ||
) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
QVector< QByteArray > Nuria::Serializer::exclude | ( | ) | const |
Returns a list of excluded fields. The default list is empty.
QStringList Nuria::Serializer::failedFields | ( | ) | const |
Returns a list of fields which failed to (de-)serialize.
bool Nuria::Serializer::populate | ( | void * | object, |
MetaObject * | meta, | ||
const QVariantMap & | data | ||
) |
Like deserialize, but instead takes a existing object and populates it with data. Returns true
if no elements failed to deserialize.
bool Nuria::Serializer::populate | ( | void * | object, |
const QByteArray & | typeName, | ||
const QVariantMap & | data | ||
) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
int Nuria::Serializer::recursionDepth | ( | ) | const |
Returns the maximum recursion depth for (de-)serialization. Default value is NoRecursion
(i.e. 0
).
QVariantMap Nuria::Serializer::serialize | ( | void * | object, |
MetaObject * | meta | ||
) |
Reads all fields from object and puts them into a QVariantMap. Fields can be excluded by using exclude.
If a field is a pointer which is a object known to , the method will recurse into it until recursion is 0
, in which case the property is silently skipped. The default value for recursion is 0
, thus by default the method will not recurse.
0
is considered to be unlimited.QVariantMap Nuria::Serializer::serialize | ( | void * | object, |
const QByteArray & | typeName | ||
) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
void Nuria::Serializer::setAllowedTypes | ( | const QVector< QByteArray > & | list | ) | const |
Sets the list of additional allowed types for serialization.
void Nuria::Serializer::setExclude | ( | const QVector< QByteArray > & | list | ) |
Sets the list of excluded fields. When (de-)serializing, all fields whose names match (case-sensitive) a entry in list will be ignored.
void Nuria::Serializer::setRecursionDepth | ( | int | maxDepth | ) |
Sets the maximum recursion depth.