[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>
ox::Error ioOp(T *io, Bounds *obj) {
ox::Error model(T *io, Bounds *obj) {
ox::Error err = 0;
io->setTypeInfo("nostalgia::common::Bounds", 4);
err |= io->op("x", &obj->x);
err |= io->op("y", &obj->y);
err |= io->op("width", &obj->width);
err |= io->op("height", &obj->height);
err |= io->field("x", &obj->x);
err |= io->field("y", &obj->y);
err |= io->field("width", &obj->width);
err |= io->field("height", &obj->height);
return err;
}

View File

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

View File

@ -14,33 +14,33 @@ namespace studio {
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)) {
return op(m_src[fieldName], dest);
return field(m_src[fieldName], dest);
} else {
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)) {
return op(m_src[fieldName], dest);
return field(m_src[fieldName], dest);
} else {
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)) {
return op(m_src[fieldName], dest);
return field(m_src[fieldName], dest);
} else {
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)) {
return op(m_src[fieldName], dest);
return field(m_src[fieldName], dest);
} else {
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()) {
*dest = src.toInt();
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()) {
*dest = src.toBool();
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()) {
*dest = src.toDouble();
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()) {
*dest = src.toString();
return 0;

View File

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

View File

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

View File

@ -14,22 +14,22 @@ namespace studio {
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;
return 0;
}
ox::Error JsonWriter::op(QString fieldName, bool *src) {
ox::Error JsonWriter::field(QString fieldName, bool *src) {
m_dest[fieldName] = *src;
return 0;
}
ox::Error JsonWriter::op(QString fieldName, double *src) {
ox::Error JsonWriter::field(QString fieldName, double *src) {
m_dest[fieldName] = *src;
return 0;
}
ox::Error JsonWriter::op(QString fieldName, QString *src) {
ox::Error JsonWriter::field(QString fieldName, QString *src) {
m_dest[fieldName] = *src;
return 0;
}

View File

@ -27,39 +27,39 @@ class JsonWriter {
public:
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>
ox::Error op(QString fieldName, T *src);
ox::Error field(QString fieldName, T *src);
template<typename T>
ox::Error op(QString fieldName, QVector<T> *src);
ox::Error field(QString fieldName, QVector<T> *src);
};
template<typename T>
ox::Error JsonWriter::op(QString fieldName, T *src) {
ox::Error JsonWriter::field(QString fieldName, T *src) {
auto obj = QJsonObject();
auto reader = JsonWriter(obj);
auto err = ioOp(&reader, src);
auto err = model(&reader, src);
m_dest[fieldName] = obj;
return err;
};
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;
QJsonArray a;
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;
return err;
@ -69,7 +69,7 @@ template<typename T>
int writeJson(QString *json, T *src) {
auto obj = QJsonObject();
JsonWriter rdr(obj);
auto err = ioOp(&rdr, src);
auto err = model(&rdr, src);
*json = QJsonDocument(obj).toJson();
return err;
}

View File

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

View File

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