6#include <QtCore/QJsonArray>
7#include <QtCore/QJsonDocument>
8#include <QtCore/QJsonObject>
9#include <QtCore/QJsonValue>
12#include <imtgql/IGqlResponse.h>
19template <
class GqlResponseBase>
20class TGraphQlJsonSerializerWrap:
public virtual GqlResponseBase
23 TGraphQlJsonSerializerWrap(IGqlResponse::GqlRequestPtr originalRequestPtr);
26 virtual QByteArray GetData()
const override;
27 virtual typename GqlResponseBase::ErrorEntryList GetErrorList()
const override;
28 virtual QStringList GetErrorMessageList()
const override;
32template<
class GqlResponseBase>
33TGraphQlJsonSerializerWrap<GqlResponseBase>::TGraphQlJsonSerializerWrap(IGqlResponse::GqlRequestPtr originalRequestPtr)
34 : GqlResponseBase(originalRequestPtr)
39template <
class GqlResponseBase>
40QByteArray TGraphQlJsonSerializerWrap<GqlResponseBase>::GetData()
const
42 QJsonDocument rawPayload = QJsonDocument::fromJson(GqlResponseBase::GetResponseData());
43 if (!rawPayload.isObject()){
44 Q_ASSERT_X(
false,
"GetData",
"Unexpected JSON");
49 QJsonValue payloadDataValue = rawPayload.object().value(QStringLiteral(
"data"));
51 if (payloadDataValue.isObject()){
52 return QJsonDocument(payloadDataValue.toObject()).toJson();
54 if (payloadDataValue.isArray()){
55 return QJsonDocument(payloadDataValue.toArray()).toJson();
58 Q_ASSERT_X(
false,
"GetData",
"Unexpected 'data' JSON");
64template <
class GqlResponseBase>
65typename GqlResponseBase::ErrorEntryList TGraphQlJsonSerializerWrap<GqlResponseBase>::GetErrorList()
const
67 QJsonDocument rawPayload = QJsonDocument::fromJson(GqlResponseBase::GetResponseData());
68 if (!rawPayload.isObject()){
69 Q_ASSERT_X(
false,
"GetErrorList",
"Unexpected JSON");
71 return typename GqlResponseBase::ErrorEntryList();
74 QJsonValue payloadErrorsValue = rawPayload.object().value(QStringLiteral(
"errors"));
76 Q_ASSERT_X(payloadErrorsValue.isArray(),
"GetErrorList",
"Unexpected 'errors' JSON");
78 const QJsonArray payloadErrorsArray = payloadErrorsValue.toArray();
79 typename GqlResponseBase::ErrorEntryList retVal;
80 for(
const QJsonValue& errorEntry: payloadErrorsArray){
81 Q_ASSERT_X(errorEntry.isObject(),
"GetErrorList",
"Unexpected error entry");
83 retVal << errorEntry.toObject().toVariantMap();
90template <
class GqlResponseBase>
91QStringList TGraphQlJsonSerializerWrap<GqlResponseBase>::GetErrorMessageList()
const
94 const typename GqlResponseBase::ErrorEntryList errors = GetErrorList();
95 for (
const QVariantMap& errorEntry: errors){
96 Q_ASSERT(errorEntry.contains(QStringLiteral(
"message")));
98 retVal << errorEntry[QStringLiteral(
"message")].toString();