Skip to content

Commit 34d392c

Browse files
committed
Merge branch 'fix' of github.com:HerrCai0907/cpp-httplib into HerrCai0907-fix
2 parents 825c3fb + 4dd2f3d commit 34d392c

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

httplib.h

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ using socket_t = int;
231231
#include <string>
232232
#include <sys/stat.h>
233233
#include <thread>
234+
#include <type_traits>
234235
#include <unordered_map>
235236
#include <unordered_set>
236237
#include <utility>
@@ -871,8 +872,13 @@ class Server {
871872
Server &set_default_file_mimetype(const std::string &mime);
872873
Server &set_file_request_handler(Handler handler);
873874

874-
Server &set_error_handler(HandlerWithResponse handler);
875-
Server &set_error_handler(Handler handler);
875+
template <class ErrorHandlerFunc>
876+
Server &set_error_handler(ErrorHandlerFunc &&handler) {
877+
return set_error_handler_impl(
878+
std::forward<ErrorHandlerFunc>(handler),
879+
std::is_convertible<ErrorHandlerFunc, HandlerWithResponse>{});
880+
}
881+
876882
Server &set_exception_handler(ExceptionHandler handler);
877883
Server &set_pre_routing_handler(HandlerWithResponse handler);
878884
Server &set_post_routing_handler(Handler handler);
@@ -934,6 +940,9 @@ class Server {
934940
size_t payload_max_length_ = CPPHTTPLIB_PAYLOAD_MAX_LENGTH;
935941

936942
private:
943+
Server &set_error_handler_impl(HandlerWithResponse handler, std::true_type);
944+
Server &set_error_handler_impl(Handler handler, std::false_type);
945+
937946
using Handlers =
938947
std::vector<std::pair<std::unique_ptr<detail::MatcherBase>, Handler>>;
939948
using HandlersForContentReader =
@@ -5808,12 +5817,14 @@ inline Server &Server::set_file_request_handler(Handler handler) {
58085817
return *this;
58095818
}
58105819

5811-
inline Server &Server::set_error_handler(HandlerWithResponse handler) {
5820+
inline Server &Server::set_error_handler_impl(HandlerWithResponse handler,
5821+
std::true_type) {
58125822
error_handler_ = std::move(handler);
58135823
return *this;
58145824
}
58155825

5816-
inline Server &Server::set_error_handler(Handler handler) {
5826+
inline Server &Server::set_error_handler_impl(Handler handler,
5827+
std::false_type) {
58175828
error_handler_ = [handler](const Request &req, Response &res) {
58185829
handler(req, res);
58195830
return HandlerResponse::Handled;

0 commit comments

Comments
 (0)