add callback param to request_builder

This commit is contained in:
2019-06-30 12:06:39 +07:00
parent 8708cbc8a4
commit 991c759f25
2 changed files with 32 additions and 5 deletions

View File

@@ -18,6 +18,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include <stdexcept> #include <stdexcept>
#include <functional>
namespace curly_hpp namespace curly_hpp
{ {
@@ -48,6 +49,9 @@ namespace curly_hpp
using time_ms_t = std::chrono::milliseconds; using time_ms_t = std::chrono::milliseconds;
using time_point_t = std::chrono::steady_clock::time_point; using time_point_t = std::chrono::steady_clock::time_point;
class request;
using callback_t = std::function<void(request)>;
class upload_handler { class upload_handler {
public: public:
virtual ~upload_handler() {} virtual ~upload_handler() {}
@@ -176,6 +180,7 @@ namespace curly_hpp
request_builder& content(std::string_view b); request_builder& content(std::string_view b);
request_builder& content(content_t b) noexcept; request_builder& content(content_t b) noexcept;
request_builder& callback(callback_t c) noexcept;
request_builder& uploader(uploader_uptr u) noexcept; request_builder& uploader(uploader_uptr u) noexcept;
request_builder& downloader(downloader_uptr d) noexcept; request_builder& downloader(downloader_uptr d) noexcept;
@@ -193,6 +198,9 @@ namespace curly_hpp
content_t& content() noexcept; content_t& content() noexcept;
const content_t& content() const noexcept; const content_t& content() const noexcept;
callback_t& callback() noexcept;
const callback_t& callback() const noexcept;
uploader_uptr& uploader() noexcept; uploader_uptr& uploader() noexcept;
const uploader_uptr& uploader() const noexcept; const uploader_uptr& uploader() const noexcept;
@@ -201,16 +209,22 @@ namespace curly_hpp
request send(); request send();
template < typename Callback >
request_builder& callback(Callback&& f) {
static_assert(std::is_convertible_v<Callback, callback_t>);
return callback(callback_t(std::forward<Callback>(f)));
}
template < typename Uploader, typename... Args > template < typename Uploader, typename... Args >
request_builder& uploader(Args&&... args) { request_builder& uploader(Args&&... args) {
return uploader(std::make_unique<Uploader>( static_assert(std::is_base_of_v<upload_handler, Uploader>);
std::forward<Args>(args)...)); return uploader(std::make_unique<Uploader>(std::forward<Args>(args)...));
} }
template < typename Downloader, typename... Args > template < typename Downloader, typename... Args >
request_builder& downloader(Args&&... args) { request_builder& downloader(Args&&... args) {
return downloader(std::make_unique<Downloader>( static_assert(std::is_base_of_v<download_handler, Downloader>);
std::forward<Args>(args)...)); return downloader(std::make_unique<Downloader>(std::forward<Args>(args)...));
} }
private: private:
std::string url_; std::string url_;
@@ -224,6 +238,7 @@ namespace curly_hpp
time_sec_t connection_timeout_{20u}; time_sec_t connection_timeout_{20u};
private: private:
content_t content_; content_t content_;
callback_t callback_;
uploader_uptr uploader_; uploader_uptr uploader_;
downloader_uptr downloader_; downloader_uptr downloader_;
}; };

View File

@@ -13,7 +13,6 @@
#include <mutex> #include <mutex>
#include <queue> #include <queue>
#include <algorithm> #include <algorithm>
#include <functional>
#include <condition_variable> #include <condition_variable>
#ifndef NOMINMAX #ifndef NOMINMAX
@@ -759,6 +758,11 @@ namespace curly_hpp
return *this; return *this;
} }
request_builder& request_builder::callback(callback_t c) noexcept {
callback_ = std::move(c);
return *this;
}
request_builder& request_builder::uploader(uploader_uptr u) noexcept { request_builder& request_builder::uploader(uploader_uptr u) noexcept {
uploader_ = std::move(u); uploader_ = std::move(u);
return *this; return *this;
@@ -813,6 +817,14 @@ namespace curly_hpp
return content_; return content_;
} }
callback_t& request_builder::callback() noexcept {
return callback_;
}
const callback_t& request_builder::callback() const noexcept {
return callback_;
}
uploader_uptr& request_builder::uploader() noexcept { uploader_uptr& request_builder::uploader() noexcept {
return uploader_; return uploader_;
} }