21 #ifndef _ENABLE_QT_EXPERIMENTAL_
22 #error You should define _ENABLE_QT_EXPERIMENTAL_ in order to use this experimental header file.
25 #include <unity/scopes/qt/HttpAsyncReader.h>
26 #include <unity/util/DefinesPtrs.h>
27 #include <unity/util/NonCopyable.h>
29 #include <QtCore/QXmlStreamReader>
30 #include <QtCore/QVector>
45 template <
typename TYPE>
46 using ResultsList = std::deque<std::shared_ptr<TYPE>>;
48 template <
typename B,
typename T>
49 static bool get_results(QXmlStreamReader& xml,
50 const std::string& object_name,
51 ResultsList<B>& results,
52 std::string& error_string);
73 std::function<bool(QXmlStreamReader& root, const std::string&, std::deque<std::shared_ptr<T>>&, std::string&)>;
76 using ResultsFuture = std::future<std::deque<std::shared_ptr<T>>>;
78 template <
typename TYPE>
79 using ResultsList = std::deque<std::shared_ptr<TYPE>>;
81 typedef std::future<std::shared_ptr<QXmlStreamReader>> QXmlStreamReaderFuture;
83 typedef std::shared_ptr<QXmlStreamReader> QXmlStreamReaderSptr;
85 typedef std::vector<std::pair<std::string, std::string>> QXmlStreamReaderParams;
113 template <
typename BASE,
typename TYPE>
114 ResultsFuture<BASE>
async_get(std::string
const& uri,
115 std::string
const& object_name,
116 ParserFunc<BASE>
const& parse = get_results<BASE, TYPE>)
const;
135 template <
typename T>
136 ResultsFuture<T>
async_get(std::string
const& uri,
137 std::string
const& object_name,
138 ParserFunc<T>
const& parse = get_results<T, T>)
const;
163 template <
typename BASE,
typename TYPE>
164 ResultsFuture<BASE>
async_get(std::string
const& host,
165 QXmlStreamReaderParams
const& params,
166 std::string
const& object_name,
167 ParserFunc<BASE>
const& parse = get_results<BASE, TYPE>)
const;
190 template <
typename T>
191 ResultsFuture<T>
async_get(std::string
const& host,
192 QXmlStreamReaderParams
const& params,
193 std::string
const& object_name,
194 ParserFunc<T>
const& parse = get_results<T, T>)
const;
219 QXmlStreamReaderFuture
async_get_parser(std::string
const& host, QXmlStreamReaderParams
const& params)
const;
233 std::shared_ptr<HttpAsyncReader> p_;
237 template <
typename BASE,
typename TYPE>
239 std::string
const& object_name,
240 ParserFunc<BASE>
const& parse)
const
242 return p_->async_get<BASE, TYPE, QXmlStreamReader>(
246 template <
typename T>
248 std::string
const& object_name,
249 ParserFunc<T>
const& parse)
const
254 template <
typename BASE,
typename TYPE>
256 QXmlStreamReaderParams
const& params,
257 std::string
const& object_name,
258 ParserFunc<BASE>
const& parse)
const
260 std::string uri = p_->get_uri(host, params);
261 return p_->async_get<BASE, TYPE, QXmlStreamReader>(
265 template <
typename T>
267 QXmlStreamReaderParams
const& params,
268 std::string
const& object_name,
269 ParserFunc<T>
const& parse)
const
271 std::string uri = p_->get_uri(host, params);
275 template <
typename B,
typename T>
276 static bool get_results(QXmlStreamReader& xml,
277 std::string
const& object_name,
278 ResultsList<B>& results,
279 std::string& error_string)
281 while (!xml.atEnd() && !xml.hasError())
284 QXmlStreamReader::TokenType token = xml.readNext();
286 if (token == QXmlStreamReader::StartDocument)
291 if (token == QXmlStreamReader::StartElement)
294 if (xml.name() == QString(object_name.c_str()))
296 results.emplace_back(std::make_shared<T>(xml));
302 error_string =
"get_results: ERROR: " + xml.errorString().toStdString() +
" at line: " + std::to_string(10);
305 return !xml.hasError();
static QXmlStreamReaderSptr create_parser_with_data(std::string const &data, std::string &error)
Creates a QXmlStreamReader filled with the given data.
QXmlStreamReaderFuture async_get_parser(std::string const &uri) const
Downloads a HTTP remote file asynchronously and returns a future to a valid XML parser containing the...
Top-level namespace for all things Unity-related.
Definition: Version.h:49
Class that downloads http XML files asynchronously.
Definition: XmlAsyncReader.h:64
ResultsFuture< BASE > async_get(std::string const &uri, std::string const &object_name, ParserFunc< BASE > const &parse=get_results< BASE, TYPE >) const
Downloads a HTTP XML remote file asynchronously and returns a future to a list of results This method...
Definition: XmlAsyncReader.h:238