From 1dc49ae0390ca6fc8f919c656e9be5c36fa33b99 Mon Sep 17 00:00:00 2001
From: David Pedersen <david.pdrsn@gmail.com>
Date: Tue, 16 Nov 2021 21:27:21 +0100
Subject: [PATCH] Remove unused file (#526)

This should have been removed as part of #521 but guess I missed it.
---
 axum/src/routing/handler_method_routing.rs | 464 ---------------------
 1 file changed, 464 deletions(-)
 delete mode 100644 axum/src/routing/handler_method_routing.rs

diff --git a/axum/src/routing/handler_method_routing.rs b/axum/src/routing/handler_method_routing.rs
deleted file mode 100644
index 47c98d44..00000000
--- a/axum/src/routing/handler_method_routing.rs
+++ /dev/null
@@ -1,464 +0,0 @@
-//! Routing for handlers based on HTTP methods.
-
-use crate::{
-    body::{box_body, BoxBody},
-    handler::Handler,
-    routing::{MethodFilter, MethodNotAllowed},
-    util::{Either, EitherProj},
-};
-use futures_util::{future::BoxFuture, ready};
-use http::{Method, Request, Response};
-use http_body::Empty;
-use pin_project_lite::pin_project;
-use std::{
-    convert::Infallible,
-    fmt,
-    future::Future,
-    marker::PhantomData,
-    pin::Pin,
-    task::{Context, Poll},
-};
-use tower::{util::Oneshot, ServiceExt};
-use tower_service::Service;
-
-/// Route requests with any standard HTTP method to the given handler.
-///
-/// # Example
-///
-/// ```rust
-/// use axum::{
-///     routing::any,
-///     Router,
-/// };
-///
-/// async fn handler() {}
-///
-/// let app = Router::new().route("/", any(handler));
-/// # async {
-/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
-/// # };
-/// ```
-///
-/// Note that this only accepts the standard HTTP methods. If you need to
-/// support non-standard methods use [`Handler::into_service`]:
-///
-/// ```rust
-/// use axum::{
-///     handler::Handler,
-///     Router,
-/// };
-///
-/// async fn handler() {}
-///
-/// let app = Router::new().route("/", handler.into_service());
-/// # async {
-/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
-/// # };
-/// ```
-pub fn any<H, B, T>(handler: H) -> MethodRouter<H, B, T, MethodNotAllowed>
-where
-    H: Handler<B, T>,
-{
-    on(MethodFilter::all(), handler)
-}
-
-/// Route `DELETE` requests to the given handler.
-///
-/// See [`get`] for an example.
-pub fn delete<H, B, T>(handler: H) -> MethodRouter<H, B, T, MethodNotAllowed>
-where
-    H: Handler<B, T>,
-{
-    on(MethodFilter::DELETE, handler)
-}
-
-/// Route `GET` requests to the given handler.
-///
-/// # Example
-///
-/// ```rust
-/// use axum::{
-///     routing::get,
-///     Router,
-/// };
-///
-/// async fn handler() {}
-///
-/// // Requests to `GET /` will go to `handler`.
-/// let app = Router::new().route("/", get(handler));
-/// # async {
-/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
-/// # };
-/// ```
-///
-/// Note that `get` routes will also be called for `HEAD` requests but will have
-/// the response body removed. Make sure to add explicit `HEAD` routes
-/// afterwards.
-pub fn get<H, B, T>(handler: H) -> MethodRouter<H, B, T, MethodNotAllowed>
-where
-    H: Handler<B, T>,
-{
-    on(MethodFilter::GET | MethodFilter::HEAD, handler)
-}
-
-/// Route `HEAD` requests to the given handler.
-///
-/// See [`get`] for an example.
-pub fn head<H, B, T>(handler: H) -> MethodRouter<H, B, T, MethodNotAllowed>
-where
-    H: Handler<B, T>,
-{
-    on(MethodFilter::HEAD, handler)
-}
-
-/// Route `OPTIONS` requests to the given handler.
-///
-/// See [`get`] for an example.
-pub fn options<H, B, T>(handler: H) -> MethodRouter<H, B, T, MethodNotAllowed>
-where
-    H: Handler<B, T>,
-{
-    on(MethodFilter::OPTIONS, handler)
-}
-
-/// Route `PATCH` requests to the given handler.
-///
-/// See [`get`] for an example.
-pub fn patch<H, B, T>(handler: H) -> MethodRouter<H, B, T, MethodNotAllowed>
-where
-    H: Handler<B, T>,
-{
-    on(MethodFilter::PATCH, handler)
-}
-
-/// Route `POST` requests to the given handler.
-///
-/// See [`get`] for an example.
-pub fn post<H, B, T>(handler: H) -> MethodRouter<H, B, T, MethodNotAllowed>
-where
-    H: Handler<B, T>,
-{
-    on(MethodFilter::POST, handler)
-}
-
-/// Route `PUT` requests to the given handler.
-///
-/// See [`get`] for an example.
-pub fn put<H, B, T>(handler: H) -> MethodRouter<H, B, T, MethodNotAllowed>
-where
-    H: Handler<B, T>,
-{
-    on(MethodFilter::PUT, handler)
-}
-
-/// Route `TRACE` requests to the given handler.
-///
-/// See [`get`] for an example.
-pub fn trace<H, B, T>(handler: H) -> MethodRouter<H, B, T, MethodNotAllowed>
-where
-    H: Handler<B, T>,
-{
-    on(MethodFilter::TRACE, handler)
-}
-
-/// Route requests with the given method to the handler.
-///
-/// # Example
-///
-/// ```rust
-/// use axum::{
-///     routing::on,
-///     Router,
-///     routing::MethodFilter,
-/// };
-///
-/// async fn handler() {}
-///
-/// // Requests to `POST /` will go to `handler`.
-/// let app = Router::new().route("/", on(MethodFilter::POST, handler));
-/// # async {
-/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
-/// # };
-/// ```
-pub fn on<H, B, T>(method: MethodFilter, handler: H) -> MethodRouter<H, B, T, MethodNotAllowed>
-where
-    H: Handler<B, T>,
-{
-    MethodRouter {
-        method,
-        handler,
-        fallback: MethodNotAllowed::new(),
-        _marker: PhantomData,
-    }
-}
-
-/// A handler [`Service`] that accepts requests based on a [`MethodFilter`] and
-/// allows chaining additional handlers.
-pub struct MethodRouter<H, B, T, F> {
-    pub(crate) method: MethodFilter,
-    pub(crate) handler: H,
-    pub(crate) fallback: F,
-    pub(crate) _marker: PhantomData<fn() -> (B, T)>,
-}
-
-impl<H, B, T, F> fmt::Debug for MethodRouter<H, B, T, F>
-where
-    T: fmt::Debug,
-    F: fmt::Debug,
-{
-    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        f.debug_struct("MethodRouter")
-            .field("method", &self.method)
-            .field("handler", &format_args!("{}", std::any::type_name::<H>()))
-            .field("fallback", &self.fallback)
-            .finish()
-    }
-}
-
-impl<H, B, T, F> Clone for MethodRouter<H, B, T, F>
-where
-    H: Clone,
-    F: Clone,
-{
-    fn clone(&self) -> Self {
-        Self {
-            method: self.method,
-            handler: self.handler.clone(),
-            fallback: self.fallback.clone(),
-            _marker: PhantomData,
-        }
-    }
-}
-
-impl<H, B, T, F> Copy for MethodRouter<H, B, T, F>
-where
-    H: Copy,
-    F: Copy,
-{
-}
-
-impl<H, B, T, F> MethodRouter<H, B, T, F> {
-    /// Chain an additional handler that will accept all requests regardless of
-    /// its HTTP method.
-    ///
-    /// See [`MethodRouter::get`] for an example.
-    pub fn any<H2, T2>(self, handler: H2) -> MethodRouter<H2, B, T2, Self>
-    where
-        H2: Handler<B, T2>,
-    {
-        self.on(MethodFilter::all(), handler)
-    }
-
-    /// Chain an additional handler that will only accept `DELETE` requests.
-    ///
-    /// See [`MethodRouter::get`] for an example.
-    pub fn delete<H2, T2>(self, handler: H2) -> MethodRouter<H2, B, T2, Self>
-    where
-        H2: Handler<B, T2>,
-    {
-        self.on(MethodFilter::DELETE, handler)
-    }
-
-    /// Chain an additional handler that will only accept `GET` requests.
-    ///
-    /// # Example
-    ///
-    /// ```rust
-    /// use axum::{routing::post, Router};
-    ///
-    /// async fn handler() {}
-    ///
-    /// async fn other_handler() {}
-    ///
-    /// // Requests to `GET /` will go to `handler` and `POST /` will go to
-    /// // `other_handler`.
-    /// let app = Router::new().route("/", post(handler).get(other_handler));
-    /// # async {
-    /// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
-    /// # };
-    /// ```
-    ///
-    /// Note that `get` routes will also be called for `HEAD` requests but will have
-    /// the response body removed. Make sure to add explicit `HEAD` routes
-    /// afterwards.
-    pub fn get<H2, T2>(self, handler: H2) -> MethodRouter<H2, B, T2, Self>
-    where
-        H2: Handler<B, T2>,
-    {
-        self.on(MethodFilter::GET | MethodFilter::HEAD, handler)
-    }
-
-    /// Chain an additional handler that will only accept `HEAD` requests.
-    ///
-    /// See [`MethodRouter::get`] for an example.
-    pub fn head<H2, T2>(self, handler: H2) -> MethodRouter<H2, B, T2, Self>
-    where
-        H2: Handler<B, T2>,
-    {
-        self.on(MethodFilter::HEAD, handler)
-    }
-
-    /// Chain an additional handler that will only accept `OPTIONS` requests.
-    ///
-    /// See [`MethodRouter::get`] for an example.
-    pub fn options<H2, T2>(self, handler: H2) -> MethodRouter<H2, B, T2, Self>
-    where
-        H2: Handler<B, T2>,
-    {
-        self.on(MethodFilter::OPTIONS, handler)
-    }
-
-    /// Chain an additional handler that will only accept `PATCH` requests.
-    ///
-    /// See [`MethodRouter::get`] for an example.
-    pub fn patch<H2, T2>(self, handler: H2) -> MethodRouter<H2, B, T2, Self>
-    where
-        H2: Handler<B, T2>,
-    {
-        self.on(MethodFilter::PATCH, handler)
-    }
-
-    /// Chain an additional handler that will only accept `POST` requests.
-    ///
-    /// See [`MethodRouter::get`] for an example.
-    pub fn post<H2, T2>(self, handler: H2) -> MethodRouter<H2, B, T2, Self>
-    where
-        H2: Handler<B, T2>,
-    {
-        self.on(MethodFilter::POST, handler)
-    }
-
-    /// Chain an additional handler that will only accept `PUT` requests.
-    ///
-    /// See [`MethodRouter::get`] for an example.
-    pub fn put<H2, T2>(self, handler: H2) -> MethodRouter<H2, B, T2, Self>
-    where
-        H2: Handler<B, T2>,
-    {
-        self.on(MethodFilter::PUT, handler)
-    }
-
-    /// Chain an additional handler that will only accept `TRACE` requests.
-    ///
-    /// See [`MethodRouter::get`] for an example.
-    pub fn trace<H2, T2>(self, handler: H2) -> MethodRouter<H2, B, T2, Self>
-    where
-        H2: Handler<B, T2>,
-    {
-        self.on(MethodFilter::TRACE, handler)
-    }
-
-    /// Chain an additional handler that will accept requests matching the given
-    /// `MethodFilter`.
-    ///
-    /// # Example
-    ///
-    /// ```rust
-    /// use axum::{
-    ///     routing::get,
-    ///     Router,
-    ///     routing::MethodFilter
-    /// };
-    ///
-    /// async fn handler() {}
-    ///
-    /// async fn other_handler() {}
-    ///
-    /// // Requests to `GET /` will go to `handler` and `DELETE /` will go to
-    /// // `other_handler`
-    /// let app = Router::new().route("/", get(handler).on(MethodFilter::DELETE, other_handler));
-    /// # async {
-    /// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
-    /// # };
-    /// ```
-    pub fn on<H2, T2>(self, method: MethodFilter, handler: H2) -> MethodRouter<H2, B, T2, Self>
-    where
-        H2: Handler<B, T2>,
-    {
-        MethodRouter {
-            method,
-            handler,
-            fallback: self,
-            _marker: PhantomData,
-        }
-    }
-}
-
-impl<H, B, T, F> Service<Request<B>> for MethodRouter<H, B, T, F>
-where
-    H: Handler<B, T>,
-    F: Service<Request<B>, Response = Response<BoxBody>, Error = Infallible> + Clone,
-    B: Send + 'static,
-{
-    type Response = Response<BoxBody>;
-    type Error = Infallible;
-    type Future = MethodRouterFuture<F, B>;
-
-    #[inline]
-    fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
-        Poll::Ready(Ok(()))
-    }
-
-    fn call(&mut self, req: Request<B>) -> Self::Future {
-        let req_method = req.method().clone();
-
-        let fut = if self.method.matches(req.method()) {
-            let fut = Handler::call(self.handler.clone(), req);
-            Either::A { inner: fut }
-        } else {
-            let fut = self.fallback.clone().oneshot(req);
-            Either::B { inner: fut }
-        };
-
-        MethodRouterFuture {
-            inner: fut,
-            req_method,
-        }
-    }
-}
-
-pin_project! {
-    /// The response future for [`MethodRouter`].
-    pub struct MethodRouterFuture<F, B>
-    where
-        F: Service<Request<B>>
-    {
-        #[pin]
-        pub(super) inner: Either<
-            BoxFuture<'static, Response<BoxBody>>,
-            Oneshot<F, Request<B>>,
-        >,
-        pub(super) req_method: Method,
-    }
-}
-
-impl<F, B> Future for MethodRouterFuture<F, B>
-where
-    F: Service<Request<B>, Response = Response<BoxBody>>,
-{
-    type Output = Result<Response<BoxBody>, F::Error>;
-
-    fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
-        let this = self.project();
-        let response = match this.inner.project() {
-            EitherProj::A { inner } => ready!(inner.poll(cx)),
-            EitherProj::B { inner } => ready!(inner.poll(cx))?,
-        };
-
-        if this.req_method == &Method::HEAD {
-            let response = response.map(|_| box_body(Empty::new()));
-            Poll::Ready(Ok(response))
-        } else {
-            Poll::Ready(Ok(response))
-        }
-    }
-}
-
-impl<F, B> fmt::Debug for MethodRouterFuture<F, B>
-where
-    F: Service<Request<B>>,
-{
-    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        f.debug_struct("MethodRouterFuture").finish()
-    }
-}