8 #include "resource.hpp" 14 template<
typename T,
typename U>
15 class Request:
public Resource<T, U> {
17 static auto reserve(U *req) {
18 auto ptr =
static_cast<T*
>(req->data)->shared_from_this();
24 static void defaultCallback(U *req,
int status) {
25 auto ptr = reserve(req);
26 if(status) { ptr->publish(ErrorEvent{status}); }
27 else { ptr->publish(E{}); }
30 template<
typename F,
typename... Args>
31 auto invoke(F &&f, Args&&... args)
32 -> std::enable_if_t<not std::is_void<std::result_of_t<F(Args...)>>::value> {
33 auto err = std::forward<F>(f)(std::forward<Args>(args)...);
34 if(err) { Emitter<T>::publish(ErrorEvent{err}); }
35 else { this->leak(); }
38 template<
typename F,
typename... Args>
39 auto invoke(F &&f, Args&&... args)
40 -> std::enable_if_t<std::is_void<std::result_of_t<F(Args...)>>::value> {
41 std::forward<F>(f)(std::forward<Args>(args)...);
46 using Resource<T, U>::Resource;
62 return (0 == uv_cancel(this->
template get<uv_req_t>()));
69 std::size_t size() const noexcept {
70 return uv_req_size(this->
template get<uv_req_t>()->type);