refs #784 Use CMemoTable to implement a compact JSON schema for CAircraftModelList.

This commit is contained in:
Mathew Sutcliffe
2016-10-25 22:42:34 +01:00
committed by Klaus Basan
parent f6f2d38821
commit 45bb9a2737
4 changed files with 70 additions and 1 deletions

View File

@@ -109,6 +109,28 @@ namespace BlackMisc
return QJsonDocument(this->toDatabaseJson()).toJson(format);
}
QJsonObject CAircraftModel::toMemoizedJson(MemoHelper::CMemoizer &helper) const
{
QJsonObject json;
auto meta = introspect<CAircraftModel>().without(MetaFlags<DisabledForJson>());
meta.forEachMemberName(*this, [ & ](const auto & member, CExplicitLatin1String name)
{
auto &&maybeMemo = helper.maybeMemoize(member);
json << std::make_pair(name.toJsonKey(), std::cref(maybeMemo));
});
return json;
}
void CAircraftModel::convertFromMemoizedJson(const QJsonObject &json, const MemoHelper::CUnmemoizer &helper)
{
auto meta = introspect<CAircraftModel>().without(MetaFlags<DisabledForJson>());
meta.forEachMemberName(*this, [ & ](auto & member, CExplicitLatin1String name)
{
auto it = json.find(name);
if (it != json.end()) { it.value() >> helper.maybeUnmemoize(member).get(); }
});
}
QString CAircraftModel::asHtmlSummary() const
{
const QString html = "Model: %1<br>Aircraft ICAO: %2<br>Livery: %3";