28 :
public server<Request, Response, InBuffer, OutBuffer> {
44 = std::function<
void(std::optional<Response>)>;
60 m_callback = std::move(callback);
78 -> std::optional<OutBuffer> {
79 if constexpr(!raw_mode) {
81 if(!req.has_value()) {
84 auto success = m_callback(
85 std::move(req.value().m_payload),
87 resp_cb = std::move(response_callback),
89 = req.value().m_header](std::optional<Response> resp) {
91 = server_type::serialize_response(std::move(hdr),
93 resp_cb(std::move(resp_buf));
97 std::move(req.value().m_header),
103 if(!maybe_failure.has_value()) {
107 = m_callback(std::move(request_buf),
109 resp_cb = std::move(response_callback),
110 fail_buf = maybe_failure.value()](
111 std::optional<Response> resp) {
112 if(resp.has_value()) {
113 resp_cb(std::move(resp.value()));
115 resp_cb(std::move(fail_buf));
119 return maybe_failure;
128 using server_type = server<Request, Response, InBuffer, OutBuffer>;
130 static constexpr auto raw_mode
131 = std::is_same_v<Request,
132 buffer> && std::is_same_v<Response, buffer>;