3#include <CesiumAsync/AsyncSystem.h>
4#include <CesiumAsync/Future.h>
5#include <CesiumUtility/JsonHelpers.h>
6#include <CesiumUtility/Result.h>
8#include <rapidjson/document.h>
44 rapidjson::Document& doc,
45 std::vector<T>&& items,
47 : _operation(
std::move(operation)), _items(
std::move(items)) {
48 const auto& linksMember = doc.FindMember(
"_links");
49 if (linksMember != doc.MemberEnd() && linksMember->value.IsObject()) {
50 const auto& selfMember = linksMember->value.FindMember(
"self");
51 if (selfMember != doc.MemberEnd() && selfMember->value.IsObject()) {
52 this->_selfUrl = CesiumUtility::JsonHelpers::getStringOrDefault(
58 const auto& nextMember = linksMember->value.FindMember(
"next");
59 if (nextMember != doc.MemberEnd() && nextMember->value.IsObject()) {
60 this->_nextUrl = CesiumUtility::JsonHelpers::getStringOrDefault(
66 const auto& prevMember = linksMember->value.FindMember(
"prev");
67 if (prevMember != doc.MemberEnd() && prevMember->value.IsObject()) {
68 this->_prevUrl = CesiumUtility::JsonHelpers::getStringOrDefault(
84 const T&
operator[](
size_t index)
const {
return _items[index]; }
89 size_t size()
const {
return _items.size(); }
94 auto begin() {
return _items.begin(); }
98 auto begin()
const {
return _items.begin(); }
103 auto end() {
return _items.end(); }
107 auto end()
const {
return _items.end(); }
118 if (!this->_nextUrl.has_value()) {
123 return _operation(connection, *this->_nextUrl);
135 if (!this->_prevUrl.has_value()) {
140 return _operation(connection, *this->_prevUrl);
144 PageOperation _operation;
145 std::vector<T> _items;
146 std::optional<std::string> _selfUrl = std::nullopt;
147 std::optional<std::string> _nextUrl = std::nullopt;
148 std::optional<std::string> _prevUrl = std::nullopt;
A system for managing asynchronous requests and tasks.
Future< T > createResolvedFuture(T &&value) const
Creates a future that is already resolved.
A value that will be available in the future, as produced by AsyncSystem.
Represents a connection to the Bentley iTwin API.
Allows access to a set of resources from a paginated list.
T & operator[](size_t index)
Returns the contained item at index.
const T & operator[](size_t index) const
Returns the contained item at index.
auto begin() const
The begin iterator of the underlying vector.
std::function< CesiumAsync::Future< CesiumUtility::Result< PagedList< T > > >(Connection &, const std::string &)> PageOperation
Callback used to obtain a page of results from a URL.
CesiumAsync::Future< CesiumUtility::Result< PagedList< T > > > next(CesiumAsync::AsyncSystem &asyncSystem, Connection &connection) const
Returns a future that will return the next page of items.
auto end()
The end iterator of the underlying vector.
CesiumAsync::Future< CesiumUtility::Result< PagedList< T > > > prev(CesiumAsync::AsyncSystem &asyncSystem, Connection &connection) const
Returns a future that will return the previous page of items.
auto begin()
The begin iterator of the underlying vector.
size_t size() const
Returns the number of contained items.
PagedList(rapidjson::Document &doc, std::vector< T > &&items, PageOperation &&operation)
Creates a new PagedList from a set of items, an iTwin API response, and a callback to retrieve more i...
auto end() const
The end iterator of the underlying vector.
Classes for interacting with the iTwin API.
Holds the result of an operation. If the operation succeeds, it will provide a value....