WIP: Use `std::move_only_function` for callbacks
WIP, waiting for GCC 12
This commit is contained in:
parent
7c627e6a12
commit
8bb987d1be
|
@ -11,7 +11,7 @@ set(META_VERSION_MAJOR 0)
|
||||||
set(META_VERSION_MINOR 0)
|
set(META_VERSION_MINOR 0)
|
||||||
set(META_VERSION_PATCH 1)
|
set(META_VERSION_PATCH 1)
|
||||||
set(META_VERSION_EXACT_SONAME ON)
|
set(META_VERSION_EXACT_SONAME ON)
|
||||||
set(META_CXX_STANDARD 20)
|
set(META_CXX_STANDARD 23)
|
||||||
|
|
||||||
project(${META_PROJECT_NAME})
|
project(${META_PROJECT_NAME})
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace LibRepoMgr {
|
||||||
template <typename SessionResponse> class MultiSession {
|
template <typename SessionResponse> class MultiSession {
|
||||||
public:
|
public:
|
||||||
using ContainerType = std::vector<SessionResponse>;
|
using ContainerType = std::vector<SessionResponse>;
|
||||||
using HandlerType = std::function<void(ContainerType &&)>;
|
using HandlerType = std::move_only_function<void(ContainerType &&)>;
|
||||||
using SharedPointerType = std::shared_ptr<MultiSession<SessionResponse>>;
|
using SharedPointerType = std::shared_ptr<MultiSession<SessionResponse>>;
|
||||||
|
|
||||||
explicit MultiSession(boost::asio::io_context &ioContext, HandlerType &&handler);
|
explicit MultiSession(boost::asio::io_context &ioContext, HandlerType &&handler);
|
||||||
|
|
|
@ -324,24 +324,24 @@ void getPackages(const Params ¶ms, ResponseHandler &&handler)
|
||||||
// retrieve packages from AUR
|
// retrieve packages from AUR
|
||||||
auto log = LogContext();
|
auto log = LogContext();
|
||||||
auto handleAurResponse
|
auto handleAurResponse
|
||||||
= [handler{ std::move(handler) }, params{ std::move(params) }, document{ make_shared<RAPIDJSON_NAMESPACE::Document>(std::move(document)) },
|
= [handler{ std::move(handler) }, params{ std::move(params) }, document{ std::move(document) },
|
||||||
details](WebClient::AurQuerySession::ContainerType &&queriedAurPackages) mutable {
|
details](WebClient::AurQuerySession::ContainerType &&queriedAurPackages) mutable {
|
||||||
auto aurPackageSearchResults = std::vector<PackageSearchResult>();
|
auto aurPackageSearchResults = std::vector<PackageSearchResult>();
|
||||||
aurPackageSearchResults.reserve(queriedAurPackages.size());
|
aurPackageSearchResults.reserve(queriedAurPackages.size());
|
||||||
auto configLock = params.setup.config.lockToRead();
|
auto configLock = params.setup.config.lockToRead();
|
||||||
auto documentArray = document->GetArray();
|
auto documentArray = document.GetArray();
|
||||||
if (details) {
|
if (details) {
|
||||||
for (auto &[packageID, package] : queriedAurPackages) {
|
for (auto &[packageID, package] : queriedAurPackages) {
|
||||||
ReflectiveRapidJSON::JsonReflector::push(std::move(package), documentArray, document->GetAllocator());
|
ReflectiveRapidJSON::JsonReflector::push(std::move(package), documentArray, document.GetAllocator());
|
||||||
}
|
}
|
||||||
} else if (!queriedAurPackages.empty()) {
|
} else if (!queriedAurPackages.empty()) {
|
||||||
for (auto &[packageID, package] : queriedAurPackages) {
|
for (auto &[packageID, package] : queriedAurPackages) {
|
||||||
ReflectiveRapidJSON::JsonReflector::push(
|
ReflectiveRapidJSON::JsonReflector::push(
|
||||||
PackageSearchResult{ params.setup.config.aur, std::move(package), packageID }, documentArray, document->GetAllocator());
|
PackageSearchResult{ params.setup.config.aur, std::move(package), packageID }, documentArray, document.GetAllocator());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
configLock.unlock();
|
configLock.unlock();
|
||||||
handler(makeJson(params.request(), *document, params.target.hasPrettyFlag()));
|
handler(makeJson(params.request(), document, params.target.hasPrettyFlag()));
|
||||||
};
|
};
|
||||||
if (mode == Mode::Name) {
|
if (mode == Mode::Name) {
|
||||||
WebClient::queryAurPackages(log, params.setup, neededAurPackages, params.setup.webServer.ioContext, std::move(handleAurResponse));
|
WebClient::queryAurPackages(log, params.setup, neededAurPackages, params.setup.webServer.ioContext, std::move(handleAurResponse));
|
||||||
|
|
Loading…
Reference in New Issue