5 #ifndef PACKIO_HANDLER_H
6 #define PACKIO_HANDLER_H
13 #include "internal/config.h"
14 #include "internal/rpc.h"
15 #include "internal/utils.h"
26 template <
typename Rpc>
29 using id_type =
typename Rpc::id_type;
30 using response_buffer_type = decltype(
31 Rpc::serialize_response(std::declval<id_type>()));
32 using function_type = std::function<void(response_buffer_type&&)>;
36 : id_(
id), handler_(std::forward<F>(handler))
44 set_error(
"Call finished with no result");
53 : id_(other.id_), handler_(std::move(other.handler_))
55 other.handler_ =
nullptr;
62 set_error(
"Call finished with no result");
65 handler_ = std::move(other.handler_);
66 other.handler_ =
nullptr;
75 complete(Rpc::serialize_response(id_, std::forward<T>(return_value)));
79 void set_value() { complete(Rpc::serialize_response(id_)); }
86 complete(Rpc::serialize_error_response(id_, std::forward<T>(error_value)));
92 complete(Rpc::serialize_error_response(id_,
"Unknown error"));
106 void complete(response_buffer_type&& buffer)
108 handler_(std::move(buffer));
113 function_type handler_;
117 #endif // PACKIO_HANDLER_H