aboutsummaryrefslogtreecommitdiff
path: root/jobs/requestdata.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'jobs/requestdata.cpp')
-rw-r--r--jobs/requestdata.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/jobs/requestdata.cpp b/jobs/requestdata.cpp
new file mode 100644
index 00000000..f5516c5f
--- /dev/null
+++ b/jobs/requestdata.cpp
@@ -0,0 +1,38 @@
+#include "requestdata.h"
+
+#include <QtCore/QByteArray>
+#include <QtCore/QJsonObject>
+#include <QtCore/QJsonArray>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QBuffer>
+
+using namespace QMatrixClient;
+
+std::unique_ptr<QIODevice> fromData(const QByteArray& data)
+{
+ auto source = std::make_unique<QBuffer>();
+ source->open(QIODevice::WriteOnly);
+ source->write(data);
+ source->close();
+ return source;
+}
+
+template <typename JsonDataT>
+inline std::unique_ptr<QIODevice> fromJson(const JsonDataT& jdata)
+{
+ return fromData(QJsonDocument(jdata).toJson(QJsonDocument::Compact));
+}
+
+RequestData::RequestData(const QByteArray& a)
+ : _source(fromData(a))
+{ }
+
+RequestData::RequestData(const QJsonObject& jo)
+ : _source(fromJson(jo))
+{ }
+
+RequestData::RequestData(const QJsonArray& ja)
+ : _source(fromJson(ja))
+{ }
+
+RequestData::~RequestData() = default;