@@ -133,64 +133,93 @@ namespace details
133133
134134 template <typename T>
135135 http_resource_mirror (http_resource<T>* res):
136- render (&empty_render),
137- render_GET (&empty_render),
138- render_POST (&empty_render),
139- render_PUT (&empty_render),
140- render_HEAD (&empty_render),
141- render_DELETE (&empty_render),
142- render_TRACE (&empty_render),
143- render_OPTIONS (&empty_render),
144- render_CONNECT (&empty_render),
145- is_allowed (&empty_is_allowed)
136+ render (
137+ HAS_METHOD (render, T, void ,
138+ const http_request&, http_response**
139+ ) ? functor(res, &T::render) : functor(&empty_render)
140+ ),
141+ render_GET(
142+ HAS_METHOD (render_GET, T, void ,
143+ const http_request&, http_response**
144+ ) ? functor(res, &T::render_GET) :
145+ (
146+ HAS_METHOD (render, T, void ,
147+ const http_request&, http_response**
148+ ) ? functor(res, &T::render) : functor(&empty_render)
149+ )
150+ ),
151+ render_POST(
152+ HAS_METHOD (render_POST, T, void ,
153+ const http_request&, http_response**
154+ ) ? functor(res, &T::render_POST) :
155+ (
156+ HAS_METHOD (render, T, void ,
157+ const http_request&, http_response**
158+ ) ? functor(res, &T::render) : functor(&empty_render)
159+ )
160+ ),
161+ render_PUT(
162+ HAS_METHOD (render_PUT, T, void ,
163+ const http_request&, http_response**
164+ ) ? functor(res, &T::render_PUT) :
165+ (
166+ HAS_METHOD (render, T, void ,
167+ const http_request&, http_response**
168+ ) ? functor(res, &T::render) : functor(&empty_render)
169+ )
170+ ),
171+ render_HEAD(
172+ HAS_METHOD (render_HEAD, T, void ,
173+ const http_request&, http_response**
174+ ) ? functor(res, &T::render_HEAD) :
175+ (
176+ HAS_METHOD (render, T, void ,
177+ const http_request&, http_response**
178+ ) ? functor(res, &T::render) : functor(&empty_render)
179+ )
180+ ),
181+ render_DELETE(
182+ HAS_METHOD (render_DELETE, T, void ,
183+ const http_request&, http_response**
184+ ) ? functor(res, &T::render_DELETE) :
185+ (
186+ HAS_METHOD (render, T, void ,
187+ const http_request&, http_response**
188+ ) ? functor(res, &T::render) : functor(&empty_render)
189+ )
190+ ),
191+ render_TRACE(
192+ HAS_METHOD (render_TRACE, T, void ,
193+ const http_request&, http_response**
194+ ) ? functor(res, &T::render_TRACE) :
195+ (
196+ HAS_METHOD (render, T, void ,
197+ const http_request&, http_response**
198+ ) ? functor(res, &T::render) : functor(&empty_render)
199+ )
200+ ),
201+ render_OPTIONS(
202+ HAS_METHOD (render_OPTIONS, T, void ,
203+ const http_request&, http_response**
204+ ) ? functor(res, &T::render_OPTIONS) :
205+ (
206+ HAS_METHOD (render, T, void ,
207+ const http_request&, http_response**
208+ ) ? functor(res, &T::render) : functor(&empty_render)
209+ )
210+ ),
211+ render_CONNECT(
212+ HAS_METHOD (render_CONNECT, T, void ,
213+ const http_request&, http_response**
214+ ) ? functor(res, &T::render_CONNECT) :
215+ (
216+ HAS_METHOD (render, T, void ,
217+ const http_request&, http_response**
218+ ) ? functor(res, &T::render) : functor(&empty_render)
219+ )
220+ ),
221+ is_allowed(res, &T::is_allowed)
146222 {
147- if (HAS_METHOD (render, T, void ,
148- const http_request&, http_response**)
149- )
150- {
151- render.bind (res, &T::render);
152- render_GET.bind (res, &T::render);
153- render_POST.bind (res, &T::render);
154- render_PUT.bind (res, &T::render);
155- render_HEAD.bind (res, &T::render);
156- render_DELETE.bind (res, &T::render);
157- render_TRACE.bind (res, &T::render);
158- render_OPTIONS.bind (res, &T::render);
159- render_CONNECT.bind (res, &T::render);
160- }
161- if (HAS_METHOD (render_GET, T, void ,
162- const http_request&, http_response**)
163- )
164- render_GET.bind (res, &T::render_GET);
165- if (HAS_METHOD (render_POST, T, void ,
166- const http_request&, http_response**)
167- )
168- render_POST.bind (res, &T::render_POST);
169- if (HAS_METHOD (render_PUT, T, void ,
170- const http_request&, http_response**)
171- )
172- render_PUT.bind (res, &T::render_PUT);
173- if (HAS_METHOD (render_HEAD, T, void ,
174- const http_request&, http_response**)
175- )
176- render_HEAD.bind (res, &T::render_HEAD);
177- if (HAS_METHOD (render_DELETE, T, void ,
178- const http_request&, http_response**)
179- )
180- render_DELETE.bind (res, &T::render_DELETE);
181- if (HAS_METHOD (render_TRACE, T, void ,
182- const http_request&, http_response**)
183- )
184- render_TRACE.bind (res, &T::render_TRACE);
185- if (HAS_METHOD (render_OPTIONS, T, void ,
186- const http_request&, http_response**)
187- )
188- render_OPTIONS.bind (res, &T::render_OPTIONS);
189- if (HAS_METHOD (render_CONNECT, T, void ,
190- const http_request&, http_response**)
191- )
192- render_CONNECT.bind (res, &T::render_CONNECT);
193- is_allowed.bind (res, &T::is_allowed);
194223 }
195224
196225 friend class ::httpserver::webserver;
0 commit comments