[nostalgia] Move from old Serialization API to new Model API

This commit is contained in:
Gary Talent 2019-03-17 13:43:00 -05:00
parent d139eb9729
commit 94afbd4f60
9 changed files with 93 additions and 91 deletions

View File

@ -37,13 +37,13 @@ class Bounds {
}; };
template<typename T> template<typename T>
ox::Error ioOp(T *io, Bounds *obj) { ox::Error model(T *io, Bounds *obj) {
ox::Error err = 0; ox::Error err = 0;
io->setTypeInfo("nostalgia::common::Bounds", 4); io->setTypeInfo("nostalgia::common::Bounds", 4);
err |= io->op("x", &obj->x); err |= io->field("x", &obj->x);
err |= io->op("y", &obj->y); err |= io->field("y", &obj->y);
err |= io->op("width", &obj->width); err |= io->field("width", &obj->width);
err |= io->op("height", &obj->height); err |= io->field("height", &obj->height);
return err; return err;
} }

View File

@ -59,11 +59,11 @@ class Point {
}; };
template<typename T> template<typename T>
ox::Error ioOp(T *io, Point *obj) { ox::Error model(T *io, Point *obj) {
ox::Error err = 0; ox::Error err = 0;
io->setTypeInfo("nostalgia::common::Bounds", 2); io->setTypeInfo("nostalgia::common::Bounds", 2);
err |= io->op("x", &obj->x); err |= io->field("x", &obj->x);
err |= io->op("y", &obj->y); err |= io->field("y", &obj->y);
return err; return err;
} }

View File

@ -14,33 +14,33 @@ namespace studio {
JsonReader::JsonReader(QJsonObject &obj): m_src(obj) { JsonReader::JsonReader(QJsonObject &obj): m_src(obj) {
} }
ox::Error JsonReader::op(QString fieldName, int *dest) { ox::Error JsonReader::field(QString fieldName, int *dest) {
if (m_src.contains(fieldName)) { if (m_src.contains(fieldName)) {
return op(m_src[fieldName], dest); return field(m_src[fieldName], dest);
} else { } else {
return JSON_ERR_FIELD_MISSING; return JSON_ERR_FIELD_MISSING;
} }
} }
ox::Error JsonReader::op(QString fieldName, bool *dest) { ox::Error JsonReader::field(QString fieldName, bool *dest) {
if (m_src.contains(fieldName)) { if (m_src.contains(fieldName)) {
return op(m_src[fieldName], dest); return field(m_src[fieldName], dest);
} else { } else {
return JSON_ERR_FIELD_MISSING; return JSON_ERR_FIELD_MISSING;
} }
} }
ox::Error JsonReader::op(QString fieldName, double *dest) { ox::Error JsonReader::field(QString fieldName, double *dest) {
if (m_src.contains(fieldName)) { if (m_src.contains(fieldName)) {
return op(m_src[fieldName], dest); return field(m_src[fieldName], dest);
} else { } else {
return JSON_ERR_FIELD_MISSING; return JSON_ERR_FIELD_MISSING;
} }
} }
ox::Error JsonReader::op(QString fieldName, QString *dest) { ox::Error JsonReader::field(QString fieldName, QString *dest) {
if (m_src.contains(fieldName)) { if (m_src.contains(fieldName)) {
return op(m_src[fieldName], dest); return field(m_src[fieldName], dest);
} else { } else {
return JSON_ERR_FIELD_MISSING; return JSON_ERR_FIELD_MISSING;
} }
@ -48,7 +48,7 @@ ox::Error JsonReader::op(QString fieldName, QString *dest) {
ox::Error JsonReader::op(QJsonValueRef src, int *dest) { ox::Error JsonReader::field(QJsonValueRef src, int *dest) {
if (src.isDouble()) { if (src.isDouble()) {
*dest = src.toInt(); *dest = src.toInt();
return 0; return 0;
@ -57,7 +57,7 @@ ox::Error JsonReader::op(QJsonValueRef src, int *dest) {
} }
} }
ox::Error JsonReader::op(QJsonValueRef src, bool *dest) { ox::Error JsonReader::field(QJsonValueRef src, bool *dest) {
if (src.isBool()) { if (src.isBool()) {
*dest = src.toBool(); *dest = src.toBool();
return 0; return 0;
@ -66,7 +66,7 @@ ox::Error JsonReader::op(QJsonValueRef src, bool *dest) {
} }
} }
ox::Error JsonReader::op(QJsonValueRef src, double *dest) { ox::Error JsonReader::field(QJsonValueRef src, double *dest) {
if (src.isDouble()) { if (src.isDouble()) {
*dest = src.toDouble(); *dest = src.toDouble();
return 0; return 0;
@ -75,7 +75,7 @@ ox::Error JsonReader::op(QJsonValueRef src, double *dest) {
} }
} }
ox::Error JsonReader::op(QJsonValueRef src, QString *dest) { ox::Error JsonReader::field(QJsonValueRef src, QString *dest) {
if (src.isString()) { if (src.isString()) {
*dest = src.toString(); *dest = src.toString();
return 0; return 0;

View File

@ -27,55 +27,55 @@ class JsonReader {
public: public:
JsonReader(QJsonObject &obj); JsonReader(QJsonObject &obj);
void setFields(int) {}; ox::Error setTypeInfo(const char*, int) { return OxError(0); };
ox::Error op(QString fieldName, int *dest); ox::Error field(QString fieldName, int *dest);
ox::Error op(QString fieldName, bool *dest); ox::Error field(QString fieldName, bool *dest);
ox::Error op(QString fieldName, double *dest); ox::Error field(QString fieldName, double *dest);
ox::Error op(QString fieldName, QString *dest); ox::Error field(QString fieldName, QString *dest);
template<typename T> template<typename T>
ox::Error op(QString fieldName, T *dest); ox::Error field(QString fieldName, T *dest);
template<typename T> template<typename T>
ox::Error op(QString fieldName, QVector<T> *dest); ox::Error field(QString fieldName, QVector<T> *dest);
private: private:
ox::Error op(QJsonValueRef src, int *dest); ox::Error field(QJsonValueRef src, int *dest);
ox::Error op(QJsonValueRef src, bool *dest); ox::Error field(QJsonValueRef src, bool *dest);
ox::Error op(QJsonValueRef src, double *dest); ox::Error field(QJsonValueRef src, double *dest);
ox::Error op(QJsonValueRef src, QString *dest); ox::Error field(QJsonValueRef src, QString *dest);
template<typename T> template<typename T>
ox::Error op(QJsonValueRef src, T *dest); ox::Error field(QJsonValueRef src, T *dest);
}; };
template<typename T> template<typename T>
ox::Error JsonReader::op(QString fieldName, T *dest) { ox::Error JsonReader::field(QString fieldName, T *dest) {
if (m_src.contains(fieldName)) { if (m_src.contains(fieldName)) {
auto obj = m_src[fieldName].toObject(); auto obj = m_src[fieldName].toObject();
auto reader = JsonReader(obj); auto reader = JsonReader(obj);
return ioOp(&reader, dest); return model(&reader, dest);
} else { } else {
return JSON_ERR_FIELD_MISSING; return JSON_ERR_FIELD_MISSING;
} }
}; };
template<typename T> template<typename T>
ox::Error JsonReader::op(QString fieldName, QVector<T> *dest) { ox::Error JsonReader::field(QString fieldName, QVector<T> *dest) {
ox::Error err = 0; ox::Error err = 0;
if (m_src.contains(fieldName)) { if (m_src.contains(fieldName)) {
auto a = m_src[fieldName].toArray(); auto a = m_src[fieldName].toArray();
dest->resize(a.size()); dest->resize(a.size());
for (int i = 0; i < dest->size(); i++) { for (int i = 0; i < dest->size(); i++) {
err |= op(a[i], &(*dest)[i]); err |= field(a[i], &(*dest)[i]);
} }
} else { } else {
err |= JSON_ERR_FIELD_MISSING; err |= JSON_ERR_FIELD_MISSING;
@ -84,17 +84,17 @@ ox::Error JsonReader::op(QString fieldName, QVector<T> *dest) {
}; };
template<typename T> template<typename T>
ox::Error JsonReader::op(QJsonValueRef src, T *dest) { ox::Error JsonReader::field(QJsonValueRef src, T *dest) {
auto obj = src.toObject(); auto obj = src.toObject();
auto reader = JsonReader(obj); auto reader = JsonReader(obj);
return ioOp(&reader, dest); return model(&reader, dest);
} }
template<typename T> template<typename T>
int readJson(QString json, T *dest) { int readJson(QString json, T *dest) {
auto obj = QJsonDocument::fromJson(json.toUtf8()).object(); auto obj = QJsonDocument::fromJson(json.toUtf8()).object();
JsonReader rdr(obj); JsonReader rdr(obj);
return ioOp(&rdr, dest); return model(&rdr, dest);
} }
} }

View File

@ -21,12 +21,13 @@ struct TestStructNest {
}; };
template<typename T> template<typename T>
int ioOp(T *io, TestStructNest *obj) { int model(T *io, TestStructNest *obj) {
Error err = 0; Error err = 0;
err |= io->op("Bool", &obj->Bool); err |= io->setTypeInfo("TestStructNest", 4);
err |= io->op("Int", &obj->Int); err |= io->field("Bool", &obj->Bool);
err |= io->op("Double", &obj->Double); err |= io->field("Int", &obj->Int);
err |= io->op("String", &obj->String); err |= io->field("Double", &obj->Double);
err |= io->field("String", &obj->String);
return err; return err;
} }
@ -39,13 +40,14 @@ struct TestStruct {
}; };
template<typename T> template<typename T>
int ioOp(T *io, TestStruct *obj) { int model(T *io, TestStruct *obj) {
Error err = 0; Error err = 0;
err |= io->op("Bool", &obj->Bool); err |= io->setTypeInfo("TestStruct", 5);
err |= io->op("Int", &obj->Int); err |= io->field("Bool", &obj->Bool);
err |= io->op("Double", &obj->Double); err |= io->field("Int", &obj->Int);
err |= io->op("String", &obj->String); err |= io->field("Double", &obj->Double);
err |= io->op("Struct", &obj->Struct); err |= io->field("String", &obj->String);
err |= io->field("Struct", &obj->Struct);
return err; return err;
} }

View File

@ -14,22 +14,22 @@ namespace studio {
JsonWriter::JsonWriter(QJsonObject &obj): m_dest(obj) { JsonWriter::JsonWriter(QJsonObject &obj): m_dest(obj) {
} }
ox::Error JsonWriter::op(QString fieldName, int *src) { ox::Error JsonWriter::field(QString fieldName, int *src) {
m_dest[fieldName] = *src; m_dest[fieldName] = *src;
return 0; return 0;
} }
ox::Error JsonWriter::op(QString fieldName, bool *src) { ox::Error JsonWriter::field(QString fieldName, bool *src) {
m_dest[fieldName] = *src; m_dest[fieldName] = *src;
return 0; return 0;
} }
ox::Error JsonWriter::op(QString fieldName, double *src) { ox::Error JsonWriter::field(QString fieldName, double *src) {
m_dest[fieldName] = *src; m_dest[fieldName] = *src;
return 0; return 0;
} }
ox::Error JsonWriter::op(QString fieldName, QString *src) { ox::Error JsonWriter::field(QString fieldName, QString *src) {
m_dest[fieldName] = *src; m_dest[fieldName] = *src;
return 0; return 0;
} }

View File

@ -27,39 +27,39 @@ class JsonWriter {
public: public:
JsonWriter(QJsonObject &obj); JsonWriter(QJsonObject &obj);
void setFields(int) {}; ox::Error setTypeInfo(const char*, int) { return OxError(0); };
ox::Error op(QString fieldName, int *src); ox::Error field(QString fieldName, int *src);
ox::Error op(QString fieldName, bool *src); ox::Error field(QString fieldName, bool *src);
ox::Error op(QString fieldName, double *src); ox::Error field(QString fieldName, double *src);
ox::Error op(QString fieldName, QString *src); ox::Error field(QString fieldName, QString *src);
template<typename T> template<typename T>
ox::Error op(QString fieldName, T *src); ox::Error field(QString fieldName, T *src);
template<typename T> template<typename T>
ox::Error op(QString fieldName, QVector<T> *src); ox::Error field(QString fieldName, QVector<T> *src);
}; };
template<typename T> template<typename T>
ox::Error JsonWriter::op(QString fieldName, T *src) { ox::Error JsonWriter::field(QString fieldName, T *src) {
auto obj = QJsonObject(); auto obj = QJsonObject();
auto reader = JsonWriter(obj); auto reader = JsonWriter(obj);
auto err = ioOp(&reader, src); auto err = model(&reader, src);
m_dest[fieldName] = obj; m_dest[fieldName] = obj;
return err; return err;
}; };
template<typename T> template<typename T>
ox::Error JsonWriter::op(QString fieldName, QVector<T> *src) { ox::Error JsonWriter::field(QString fieldName, QVector<T> *src) {
ox::Error err = 0; ox::Error err = 0;
QJsonArray a; QJsonArray a;
for (int i = 0; i < src->size(); i++) { for (int i = 0; i < src->size(); i++) {
err |= op(a[i], &src->at(i)); err |= field(a[i], &src->at(i));
} }
m_dest[fieldName] = a; m_dest[fieldName] = a;
return err; return err;
@ -69,7 +69,7 @@ template<typename T>
int writeJson(QString *json, T *src) { int writeJson(QString *json, T *src) {
auto obj = QJsonObject(); auto obj = QJsonObject();
JsonWriter rdr(obj); JsonWriter rdr(obj);
auto err = ioOp(&rdr, src); auto err = model(&rdr, src);
*json = QJsonDocument(obj).toJson(); *json = QJsonDocument(obj).toJson();
return err; return err;
} }

View File

@ -35,10 +35,10 @@ struct NostalgiaStudioState {
}; };
template<typename T> template<typename T>
ox::Error ioOp(T *io, NostalgiaStudioState *obj) { ox::Error model(T *io, NostalgiaStudioState *obj) {
ox::Error err = 0; ox::Error err = 0;
io->setFields(1); err |= io->setTypeInfo("NostalgiaStudioState", 1);
err |= io->op("project_path", &obj->projectPath); err |= io->field("project_path", &obj->projectPath);
return err; return err;
} }
@ -49,11 +49,11 @@ struct NostalgiaStudioPluginDef {
}; };
template<typename T> template<typename T>
ox::Error ioOp(T *io, NostalgiaStudioPluginDef *obj) { ox::Error model(T *io, NostalgiaStudioPluginDef *obj) {
ox::Error err = 0; ox::Error err = 0;
io->setFields(2); err |= io->setTypeInfo("NostalgiaStudioPluginDef", 2);
err |= io->op("dir", &obj->dir); err |= io->field("dir", &obj->dir);
err |= io->op("lib_name", &obj->libName); err |= io->field("lib_name", &obj->libName);
return err; return err;
} }
@ -65,12 +65,12 @@ struct NostalgiaStudioProfile {
}; };
template<typename T> template<typename T>
ox::Error ioOp(T *io, NostalgiaStudioProfile *obj) { ox::Error model(T *io, NostalgiaStudioProfile *obj) {
ox::Error err = 0; ox::Error err = 0;
io->setFields(3); io->setTypeInfo("NostalgiaStudioProfile", 3);
err |= io->op("app_name", &obj->appName); err |= io->field("app_name", &obj->appName);
err |= io->op("org_name", &obj->orgName); err |= io->field("org_name", &obj->orgName);
err |= io->op("plugins_path", &obj->pluginsPath); err |= io->field("plugins_path", &obj->pluginsPath);
return err; return err;
} }

View File

@ -25,11 +25,11 @@ struct Tile {
}; };
template<typename T> template<typename T>
ox::Error ioOpRead(T *io, Tile *obj) { ox::Error modelRead(T *io, Tile *obj) {
ox::Error err = 0; ox::Error err = 0;
io->setTypeInfo("nostalgia::world::Tile", Tile::Fields); io->setTypeInfo("nostalgia::world::Tile", Tile::Fields);
err |= io->op("bgTile", &obj->bgTile); err |= io->field("bgTile", &obj->bgTile);
err |= io->op("type", &obj->type); err |= io->field("type", &obj->type);
return err; return err;
} }
@ -37,10 +37,10 @@ ox::Error ioOpRead(T *io, Tile *obj) {
struct Zone { struct Zone {
template<typename T> template<typename T>
friend ox::Error ioOpRead(T*, Zone*); friend ox::Error modelRead(T*, Zone*);
template<typename T> template<typename T>
friend ox::Error ioOpWrite(T*, Zone*); friend ox::Error modelWrite(T*, Zone*);
protected: protected:
static constexpr auto Fields = 2; static constexpr auto Fields = 2;
@ -61,18 +61,18 @@ struct Zone {
}; };
template<typename T> template<typename T>
ox::Error ioOpRead(T *io, Zone *obj) { ox::Error modelRead(T *io, Zone *obj) {
ox::Error err = 0; ox::Error err = 0;
io->setTypeInfo("nostalgia::world::Zone", Zone::Fields); io->setTypeInfo("nostalgia::world::Zone", Zone::Fields);
err |= io->op("bounds", &obj->m_bounds); err |= io->field("bounds", &obj->m_bounds);
return err; return err;
} }
template<typename T> template<typename T>
ox::Error ioOpWrite(T *io, Zone *obj) { ox::Error modelWrite(T *io, Zone *obj) {
ox::Error err = 0; ox::Error err = 0;
io->setTypeInfo("nostalgia::world::Zone", Zone::Fields); io->setTypeInfo("nostalgia::world::Zone", Zone::Fields);
err |= io->op("bounds", &obj->m_bounds); err |= io->field("bounds", &obj->m_bounds);
return err; return err;
} }
@ -80,10 +80,10 @@ ox::Error ioOpWrite(T *io, Zone *obj) {
struct Region { struct Region {
template<typename T> template<typename T>
friend ox::Error ioOpRead(T*, Region*); friend ox::Error modelRead(T*, Region*);
template<typename T> template<typename T>
friend ox::Error ioOpWrite(T*, Region*); friend ox::Error modelWrite(T*, Region*);
protected: protected:
static constexpr auto Fields = 1; static constexpr auto Fields = 1;
@ -94,14 +94,14 @@ struct Region {
}; };
template<typename T> template<typename T>
ox::Error ioOpRead(T *io, Region *obj) { ox::Error modelRead(T *io, Region *obj) {
ox::Error err = 0; ox::Error err = 0;
io->setTypeInfo("nostalgia::World::Region", Region::Fields); io->setTypeInfo("nostalgia::World::Region", Region::Fields);
return err; return err;
} }
template<typename T> template<typename T>
ox::Error ioOpWrite(T *io, Region *obj) { ox::Error modelWrite(T *io, Region *obj) {
ox::Error err = 0; ox::Error err = 0;
io->setTypeInfo("nostalgia::World::Region", Region::Fields); io->setTypeInfo("nostalgia::World::Region", Region::Fields);
return err; return err;