20 #ifndef _ENABLE_QT_EXPERIMENTAL_
21 #error You should define _ENABLE_QT_EXPERIMENTAL_ in order to use this experimental header file.
24 #include <unity/scopes/qt/HttpAsyncReader.h>
25 #include <unity/util/DefinesPtrs.h>
26 #include <unity/util/NonCopyable.h>
28 #include <QtCore/QXmlStreamReader>
29 #include <QtCore/QVector>
44 template <
typename TYPE>
45 using ResultsList = std::deque<std::shared_ptr<TYPE>>;
47 template <
typename B,
typename T>
48 static bool get_results(QXmlStreamReader& xml,
49 const std::string& object_name,
50 ResultsList<B>& results,
51 std::string& error_string);
72 std::function<bool(QXmlStreamReader& root, const std::string&, std::deque<std::shared_ptr<T>>&, std::string&)>;
75 using ResultsFuture = std::future<std::deque<std::shared_ptr<T>>>;
77 template <
typename TYPE>
78 using ResultsList = std::deque<std::shared_ptr<TYPE>>;
80 typedef std::future<std::shared_ptr<QXmlStreamReader>> QXmlStreamReaderFuture;
82 typedef std::shared_ptr<QXmlStreamReader> QXmlStreamReaderSptr;
84 typedef std::vector<std::pair<std::string, std::string>> QXmlStreamReaderParams;
112 template <
typename BASE,
typename TYPE>
113 ResultsFuture<BASE>
async_get(std::string
const& uri,
114 std::string
const& object_name,
115 ParserFunc<BASE>
const& parse = get_results<BASE, TYPE>)
const;
134 template <
typename T>
135 ResultsFuture<T>
async_get(std::string
const& uri,
136 std::string
const& object_name,
137 ParserFunc<T>
const& parse = get_results<T, T>)
const;
162 template <
typename BASE,
typename TYPE>
163 ResultsFuture<BASE>
async_get(std::string
const& host,
164 QXmlStreamReaderParams
const& params,
165 std::string
const& object_name,
166 ParserFunc<BASE>
const& parse = get_results<BASE, TYPE>)
const;
189 template <
typename T>
190 ResultsFuture<T>
async_get(std::string
const& host,
191 QXmlStreamReaderParams
const& params,
192 std::string
const& object_name,
193 ParserFunc<T>
const& parse = get_results<T, T>)
const;
218 QXmlStreamReaderFuture
async_get_parser(std::string
const& host, QXmlStreamReaderParams
const& params)
const;
232 std::shared_ptr<HttpAsyncReader> p_;
236 template <
typename BASE,
typename TYPE>
238 std::string
const& object_name,
239 ParserFunc<BASE>
const& parse)
const
241 return p_->async_get<BASE, TYPE, QXmlStreamReader>(
245 template <
typename T>
247 std::string
const& object_name,
248 ParserFunc<T>
const& parse)
const
253 template <
typename BASE,
typename TYPE>
255 QXmlStreamReaderParams
const& params,
256 std::string
const& object_name,
257 ParserFunc<BASE>
const& parse)
const
259 std::string uri = p_->get_uri(host, params);
260 return p_->async_get<BASE, TYPE, QXmlStreamReader>(
264 template <
typename T>
266 QXmlStreamReaderParams
const& params,
267 std::string
const& object_name,
268 ParserFunc<T>
const& parse)
const
270 std::string uri = p_->get_uri(host, params);
274 template <
typename B,
typename T>
275 static bool get_results(QXmlStreamReader& xml,
276 std::string
const& object_name,
277 ResultsList<B>& results,
278 std::string& error_string)
280 while (!xml.atEnd() && !xml.hasError())
283 QXmlStreamReader::TokenType token = xml.readNext();
285 if (token == QXmlStreamReader::StartDocument)
290 if (token == QXmlStreamReader::StartElement)
293 if (xml.name() == QString(object_name.c_str()))
295 results.emplace_back(std::make_shared<T>(xml));
301 error_string =
"get_results: ERROR: " + xml.errorString().toStdString() +
" at line: " + std::to_string(10);
304 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...
Definition: HttpAsyncReader.h:39
Class that downloads http XML files asynchronously.
Definition: XmlAsyncReader.h:63
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:237