iserializable.h
Go to the documentation of this file.
1 #ifndef DNAI_INTERFACES_SERIALIZABLE_H
2 #define DNAI_INTERFACES_SERIALIZABLE_H
3 #include <QJsonObject>
4 #include <QJsonArray>
5 
6 namespace dnai {
7  namespace interfaces {
12  {
13  public:
14  virtual ~ISerializable() = default;
19  virtual void serialize(QJsonObject &obj) const = 0;
20  protected:
25  virtual void _deserialize(const QJsonObject &obj) = 0;
26  };
27 
32  template <class T>
34  {
35  public:
36  virtual ~ASerializable() = default;
37  virtual void serialize(QJsonObject &obj) const override = 0;
38 
39  template<class DataType>
40  QJsonArray serializeList(const QList<DataType *> &datalist) const
41  {
42  QJsonArray tmp;
43  foreach(const auto data, datalist) {
44  QJsonObject var;
45  data->serialize(var);
46  tmp.append(var);
47  }
48  return tmp;
49  }
50 
56  /*static T *deserialize(const QJsonObject &obj)
57  {
58  auto n = dynamic_cast<ASerializable *>(new T);
59  if (n == nullptr)
60  return nullptr;
61  n->_deserialize(obj);
62  return dynamic_cast<T *>(n);
63  }*/
64 
65  template<typename ... Args>
66  static T *deserialize(const QJsonObject &obj, Args& ... args)
67  {
68  auto n = dynamic_cast<ASerializable *>(new T(args...));
69  if (n == nullptr)
70  return nullptr;
71  n->_deserialize(obj);
72  return dynamic_cast<T *>(n);
73  }
74  protected:
75  virtual void _deserialize(const QJsonObject &obj) override = 0;
76  };
77  }
78 }
79 
80 
81 #endif //DNAI_INTERFACES_SERIALIZABLE_H
Allow inherited class to serialize and deserialize itself.
Definition: iserializable.h:33
QJsonArray serializeList(const QList< DataType * > &datalist) const
Definition: iserializable.h:40
virtual void _deserialize(const QJsonObject &obj) override=0
Implement this function in order to use deserialize(const QJsonObject &obj)
virtual void serialize(QJsonObject &obj) const override=0
Implement this function to serialize into QJsonObject.
virtual ~ISerializable()=default
virtual void serialize(QJsonObject &obj) const =0
Implement this function to serialize into QJsonObject.
Allow inherited class to serialize and deserialize itself.
Definition: iserializable.h:11
virtual void _deserialize(const QJsonObject &obj)=0
Implement this function in order to use deserialize(const QJsonObject &obj)
static T * deserialize(const QJsonObject &obj, Args &...args)
This function deserialize into a new instance of type T *.
Definition: iserializable.h:66
Definition: api.h:13
virtual ~ASerializable()=default