@@ -59,6 +59,19 @@ macro_rules! top_level_service_fn {
5959 ) ;
6060 } ;
6161
62+ (
63+ $name: ident, CONNECT
64+ ) => {
65+ top_level_service_fn!(
66+ /// Route `CONNECT` requests to the given service.
67+ ///
68+ /// See [`MethodFilter::CONNECT`] for when you'd want to use this,
69+ /// and [`get_service`] for an example.
70+ $name,
71+ CONNECT
72+ ) ;
73+ } ;
74+
6275 (
6376 $name: ident, $method: ident
6477 ) => {
@@ -118,6 +131,19 @@ macro_rules! top_level_handler_fn {
118131 ) ;
119132 } ;
120133
134+ (
135+ $name: ident, CONNECT
136+ ) => {
137+ top_level_handler_fn!(
138+ /// Route `CONNECT` requests to the given handler.
139+ ///
140+ /// See [`MethodFilter::CONNECT`] for when you'd want to use this,
141+ /// and [`get`] for an example.
142+ $name,
143+ CONNECT
144+ ) ;
145+ } ;
146+
121147 (
122148 $name: ident, $method: ident
123149 ) => {
@@ -187,6 +213,19 @@ macro_rules! chained_service_fn {
187213 ) ;
188214 } ;
189215
216+ (
217+ $name: ident, CONNECT
218+ ) => {
219+ chained_service_fn!(
220+ /// Chain an additional service that will only accept `CONNECT` requests.
221+ ///
222+ /// See [`MethodFilter::CONNECT`] for when you'd want to use this,
223+ /// and [`MethodRouter::get_service`] for an example.
224+ $name,
225+ CONNECT
226+ ) ;
227+ } ;
228+
190229 (
191230 $name: ident, $method: ident
192231 ) => {
@@ -250,6 +289,19 @@ macro_rules! chained_handler_fn {
250289 ) ;
251290 } ;
252291
292+ (
293+ $name: ident, CONNECT
294+ ) => {
295+ chained_handler_fn!(
296+ /// Chain an additional handler that will only accept `CONNECT` requests.
297+ ///
298+ /// See [`MethodFilter::CONNECT`] for when you'd want to use this,
299+ /// and [`MethodRouter::get`] for an example.
300+ $name,
301+ CONNECT
302+ ) ;
303+ } ;
304+
253305 (
254306 $name: ident, $method: ident
255307 ) => {
@@ -279,6 +331,7 @@ macro_rules! chained_handler_fn {
279331 } ;
280332}
281333
334+ top_level_service_fn ! ( connect_service, CONNECT ) ;
282335top_level_service_fn ! ( delete_service, DELETE ) ;
283336top_level_service_fn ! ( get_service, GET ) ;
284337top_level_service_fn ! ( head_service, HEAD ) ;
@@ -382,6 +435,7 @@ where
382435 . skip_allow_header ( )
383436}
384437
438+ top_level_handler_fn ! ( connect, CONNECT ) ;
385439top_level_handler_fn ! ( delete, DELETE ) ;
386440top_level_handler_fn ! ( get, GET ) ;
387441top_level_handler_fn ! ( head, HEAD ) ;
@@ -498,6 +552,7 @@ pub struct MethodRouter<S = (), E = Infallible> {
498552 post : MethodEndpoint < S , E > ,
499553 put : MethodEndpoint < S , E > ,
500554 trace : MethodEndpoint < S , E > ,
555+ connect : MethodEndpoint < S , E > ,
501556 fallback : Fallback < S , E > ,
502557 allow_header : AllowHeader ,
503558}
@@ -539,6 +594,7 @@ impl<S, E> fmt::Debug for MethodRouter<S, E> {
539594 . field ( "post" , & self . post )
540595 . field ( "put" , & self . put )
541596 . field ( "trace" , & self . trace )
597+ . field ( "connect" , & self . connect )
542598 . field ( "fallback" , & self . fallback )
543599 . field ( "allow_header" , & self . allow_header )
544600 . finish ( )
@@ -583,6 +639,7 @@ where
583639 )
584640 }
585641
642+ chained_handler_fn ! ( connect, CONNECT ) ;
586643 chained_handler_fn ! ( delete, DELETE ) ;
587644 chained_handler_fn ! ( get, GET ) ;
588645 chained_handler_fn ! ( head, HEAD ) ;
@@ -690,6 +747,7 @@ where
690747 post : MethodEndpoint :: None ,
691748 put : MethodEndpoint :: None ,
692749 trace : MethodEndpoint :: None ,
750+ connect : MethodEndpoint :: None ,
693751 allow_header : AllowHeader :: None ,
694752 fallback : Fallback :: Default ( fallback) ,
695753 }
@@ -706,6 +764,7 @@ where
706764 post : self . post . with_state ( & state) ,
707765 put : self . put . with_state ( & state) ,
708766 trace : self . trace . with_state ( & state) ,
767+ connect : self . connect . with_state ( & state) ,
709768 allow_header : self . allow_header ,
710769 fallback : self . fallback . with_state ( state) ,
711770 }
@@ -854,9 +913,20 @@ where
854913 & [ "DELETE" ] ,
855914 ) ;
856915
916+ set_endpoint (
917+ "CONNECT" ,
918+ & mut self . options ,
919+ & endpoint,
920+ filter,
921+ MethodFilter :: CONNECT ,
922+ & mut self . allow_header ,
923+ & [ "CONNECT" ] ,
924+ ) ;
925+
857926 self
858927 }
859928
929+ chained_service_fn ! ( connect_service, CONNECT ) ;
860930 chained_service_fn ! ( delete_service, DELETE ) ;
861931 chained_service_fn ! ( get_service, GET ) ;
862932 chained_service_fn ! ( head_service, HEAD ) ;
@@ -900,6 +970,7 @@ where
900970 post : self . post . map ( layer_fn. clone ( ) ) ,
901971 put : self . put . map ( layer_fn. clone ( ) ) ,
902972 trace : self . trace . map ( layer_fn. clone ( ) ) ,
973+ connect : self . connect . map ( layer_fn. clone ( ) ) ,
903974 fallback : self . fallback . map ( layer_fn) ,
904975 allow_header : self . allow_header ,
905976 }
@@ -924,6 +995,7 @@ where
924995 && self . post . is_none ( )
925996 && self . put . is_none ( )
926997 && self . trace . is_none ( )
998+ && self . connect . is_none ( )
927999 {
9281000 panic ! (
9291001 "Adding a route_layer before any routes is a no-op. \
@@ -944,7 +1016,8 @@ where
9441016 self . patch = self . patch . map ( layer_fn. clone ( ) ) ;
9451017 self . post = self . post . map ( layer_fn. clone ( ) ) ;
9461018 self . put = self . put . map ( layer_fn. clone ( ) ) ;
947- self . trace = self . trace . map ( layer_fn) ;
1019+ self . trace = self . trace . map ( layer_fn. clone ( ) ) ;
1020+ self . connect = self . connect . map ( layer_fn) ;
9481021
9491022 self
9501023 }
@@ -985,6 +1058,7 @@ where
9851058 self . post = merge_inner ( path, "POST" , self . post , other. post ) ;
9861059 self . put = merge_inner ( path, "PUT" , self . put , other. put ) ;
9871060 self . trace = merge_inner ( path, "TRACE" , self . trace , other. trace ) ;
1061+ self . connect = merge_inner ( path, "CONNECT" , self . connect , other. connect ) ;
9881062
9891063 self . fallback = self
9901064 . fallback
@@ -1058,6 +1132,7 @@ where
10581132 post,
10591133 put,
10601134 trace,
1135+ connect,
10611136 fallback,
10621137 allow_header,
10631138 } = self ;
@@ -1071,6 +1146,7 @@ where
10711146 call ! ( req, method, PUT , put) ;
10721147 call ! ( req, method, DELETE , delete) ;
10731148 call ! ( req, method, TRACE , trace) ;
1149+ call ! ( req, method, CONNECT , connect) ;
10741150
10751151 let future = fallback. clone ( ) . call_with_state ( req, state) ;
10761152
@@ -1113,6 +1189,7 @@ impl<S, E> Clone for MethodRouter<S, E> {
11131189 post : self . post . clone ( ) ,
11141190 put : self . put . clone ( ) ,
11151191 trace : self . trace . clone ( ) ,
1192+ connect : self . connect . clone ( ) ,
11161193 fallback : self . fallback . clone ( ) ,
11171194 allow_header : self . allow_header . clone ( ) ,
11181195 }
0 commit comments