24#ifdef __cpp_impl_coroutine
32using HttpRequestPtr = std::shared_ptr<HttpRequest>;
33using HttpResponsePtr = std::shared_ptr<HttpResponse>;
37#ifdef __cpp_impl_coroutine
53template <
typename ReturnType,
typename... Arguments>
56 using result_type = ReturnType;
58 template <std::
size_t Index>
60 typename std::tuple_element_t<Index, std::tuple<Arguments...>>;
62 static const std::size_t arity =
sizeof...(Arguments);
63 using class_type = void;
64 using return_type = ReturnType;
65 static const bool isHTTPFunction =
false;
66 static const bool isClassFunction =
false;
67 static const bool isStreamHandler =
false;
68 static const bool isDrObjectClass =
false;
69 static const bool isCoroutine =
false;
71 static const std::string name()
73 return std::string(
"Normal or Static Function");
82template <
typename ReturnType,
typename... Arguments>
84 ReturnType (*)(
const HttpRequestPtr &req,
85 std::function<
void(
const HttpResponsePtr &)> &&callback,
89 static const bool isCoroutine =
false;
90 using class_type = void;
91 using first_param_type = HttpRequestPtr;
92 using return_type = ReturnType;
96template <
typename T,
typename ReturnType,
typename... Arguments>
98 ReturnType (*)(T &&customReq,
99 std::function<
void(
const HttpResponsePtr &)> &&callback,
103 static const bool isCoroutine =
false;
104 using class_type = void;
105 using first_param_type = T;
106 using return_type = ReturnType;
110template <
typename ReturnType,
typename... Arguments>
112 ReturnType (*)(
const HttpRequestPtr &req,
113 RequestStreamPtr &&streamCtx,
114 std::function<
void(
const HttpResponsePtr &)> &&callback,
118 static const bool isCoroutine =
false;
119 static const bool isStreamHandler =
true;
120 using class_type = void;
121 using first_param_type = HttpRequestPtr;
122 using return_type = ReturnType;
128template <
typename Function>
131 decltype(&std::remove_reference_t<Function>::operator())>
133 static const bool isClassFunction =
false;
134 static const bool isDrObjectClass =
false;
135 using class_type = void;
137 static const std::string name()
139 return std::string(
"Functor");
148template <
typename ClassType,
typename ReturnType,
typename... Arguments>
152 static const bool isClassFunction =
true;
153 static const bool isDrObjectClass =
154 std::is_base_of<DrObject<ClassType>, ClassType>::value;
155 using class_type = ClassType;
157 static const std::string name()
159 return std::string(
"Class Function");
164template <
typename ClassType,
typename ReturnType,
typename... Arguments>
168 static const bool isClassFunction =
true;
169 static const bool isDrObjectClass =
170 std::is_base_of<DrObject<ClassType>, ClassType>::value;
171 using class_type = ClassType;
173 static const std::string name()
175 return std::string(
"Class Function");
182#ifdef __cpp_impl_coroutine
183template <
typename... Arguments>
186 std::function<
void(
const HttpResponsePtr &)> callback,
189 static const bool isHTTPFunction =
true;
190 static const bool isCoroutine =
true;
191 using class_type = void;
192 using first_param_type = HttpRequestPtr;
196template <
typename... Arguments>
197struct FunctionTraits<
198 Task<> (*)(HttpRequestPtr req,
199 std::function<
void(
const HttpResponsePtr &)> callback,
200 Arguments...)> : FunctionTraits<
AsyncTask (*)(Arguments...)>
202 static const bool isHTTPFunction =
true;
203 static const bool isCoroutine =
true;
204 using class_type = void;
205 using first_param_type = HttpRequestPtr;
206 using return_type =
Task<>;
209template <
typename... Arguments>
210struct FunctionTraits<Task<HttpResponsePtr> (*)(HttpRequestPtr req,
212 : FunctionTraits<AsyncTask (*)(Arguments...)>
214 static const bool isHTTPFunction =
true;
215 static const bool isCoroutine =
true;
216 using class_type = void;
217 using first_param_type = HttpRequestPtr;
218 using return_type = Task<HttpResponsePtr>;
226template <
typename ReturnType,
typename... Arguments>
228 ReturnType (*)(HttpRequestPtr &req,
229 std::function<
void(
const HttpResponsePtr &)> &&callback,
232 static const bool isHTTPFunction =
false;
233 using class_type = void;
236template <
typename ReturnType,
typename... Arguments>
238 ReturnType (*)(HttpRequestPtr &&req,
239 std::function<
void(
const HttpResponsePtr &)> &&callback,
242 static const bool isHTTPFunction =
false;
243 using class_type = void;
Abstract class for webapp developer to get or set the Http request;.
Definition HttpRequest.h:81
Definition HttpResponse.h:117
Drogon Test is a minimal effort test framework developed because the major C++ test frameworks doesn'...
Definition Attribute.h:23
Definition coroutine.h:355
Definition coroutine.h:161
Definition FunctionTraits.h:132
Definition FunctionTraits.h:43