diff --git a/viz-core/src/from_request.rs b/viz-core/src/from_request.rs index 32f26c48..130e48bc 100644 --- a/viz-core/src/from_request.rs +++ b/viz-core/src/from_request.rs @@ -1,9 +1,9 @@ //! Extracts data from the [`Request`] by types. -use crate::{async_trait, IntoResponse, Request}; +use crate::{IntoResponse, Request}; /// An interface for extracting data from the HTTP [`Request`]. -#[async_trait] +#[crate::async_trait] pub trait FromRequest: Sized { /// The type returned in the event of a conversion error. type Error: IntoResponse; @@ -12,7 +12,7 @@ pub trait FromRequest: Sized { async fn extract(req: &mut Request) -> Result; } -#[async_trait] +#[crate::async_trait] impl FromRequest for Option where T: FromRequest, @@ -24,7 +24,7 @@ where } } -#[async_trait] +#[crate::async_trait] impl FromRequest for Result where T: FromRequest, diff --git a/viz-core/src/handler.rs b/viz-core/src/handler.rs index 32ebfba9..5bff45dc 100644 --- a/viz-core/src/handler.rs +++ b/viz-core/src/handler.rs @@ -1,7 +1,5 @@ //! Traits and types for handling an HTTP. -use crate::{async_trait, Future}; - mod cloneable; mod after; @@ -58,7 +56,7 @@ pub use service::ServiceHandler; /// A simplified asynchronous interface for handling input and output. /// /// Composable request handlers. -#[async_trait] +#[crate::async_trait] pub trait Handler: Send + Sync + 'static { /// The returned type after the call operator is used. type Output; @@ -67,12 +65,12 @@ pub trait Handler: Send + Sync + 'static { async fn call(&self, input: Input) -> Self::Output; } -#[async_trait] +#[crate::async_trait] impl Handler for F where I: Send + 'static, F: Fn(I) -> Fut + ?Sized + Clone + Send + Sync + 'static, - Fut: Future + Send + 'static, + Fut: ::core::future::Future + Send + 'static, { type Output = Fut::Output; diff --git a/viz-core/src/handler/after.rs b/viz-core/src/handler/after.rs index 8964fffe..4b452389 100644 --- a/viz-core/src/handler/after.rs +++ b/viz-core/src/handler/after.rs @@ -1,4 +1,4 @@ -use crate::{async_trait, Handler, Result}; +use crate::{Handler, Result}; /// Maps the output `Result` after the handler called. #[derive(Debug, Clone)] @@ -15,13 +15,12 @@ impl After { } } -#[async_trait] +#[crate::async_trait] impl Handler for After where I: Send + 'static, H: Handler>, - F: Handler + Clone + 'static, - O: 'static, + F: Handler, { type Output = F::Output; diff --git a/viz-core/src/handler/and_then.rs b/viz-core/src/handler/and_then.rs index 6b5b81c2..515388dd 100644 --- a/viz-core/src/handler/and_then.rs +++ b/viz-core/src/handler/and_then.rs @@ -1,4 +1,4 @@ -use crate::{async_trait, Handler, Result}; +use crate::{Handler, Result}; /// Calls `op` if the output is `Ok`, otherwise returns the `Err` value of the output. #[derive(Debug, Clone)] @@ -15,7 +15,7 @@ impl AndThen { } } -#[async_trait] +#[crate::async_trait] impl Handler for AndThen where I: Send + 'static, diff --git a/viz-core/src/handler/around.rs b/viz-core/src/handler/around.rs index bd928167..2e401964 100644 --- a/viz-core/src/handler/around.rs +++ b/viz-core/src/handler/around.rs @@ -1,4 +1,4 @@ -use crate::{async_trait, Handler, Result}; +use crate::{Handler, Result}; /// Represents a middleware parameter, which is a tuple that includes Requset and `BoxHandler`. pub type Next = (I, H); @@ -18,13 +18,12 @@ impl Around { } } -#[async_trait] +#[crate::async_trait] impl Handler for Around where I: Send + 'static, H: Handler> + Clone, F: Handler, Output = H::Output>, - O: 'static, { type Output = F::Output; diff --git a/viz-core/src/handler/before.rs b/viz-core/src/handler/before.rs index 5b94bf9d..6eeb901b 100644 --- a/viz-core/src/handler/before.rs +++ b/viz-core/src/handler/before.rs @@ -1,4 +1,4 @@ -use crate::{async_trait, Handler, Result}; +use crate::{Handler, Result}; /// Maps the input before the handler calls. #[derive(Debug, Clone)] @@ -15,13 +15,12 @@ impl Before { } } -#[async_trait] +#[crate::async_trait] impl Handler for Before where I: Send + 'static, F: Handler>, H: Handler>, - O: 'static, { type Output = H::Output; diff --git a/viz-core/src/handler/boxed.rs b/viz-core/src/handler/boxed.rs index d1b71e7d..43ea69aa 100644 --- a/viz-core/src/handler/boxed.rs +++ b/viz-core/src/handler/boxed.rs @@ -1,7 +1,7 @@ use std::fmt; use super::cloneable::BoxCloneable; -use crate::{async_trait, Handler, Request, Response, Result}; +use crate::{Handler, Request, Response, Result}; /// A [`Clone`] + [`Send`] boxed [`Handler`]. pub struct BoxHandler>(BoxCloneable); @@ -18,7 +18,7 @@ impl BoxHandler { impl Clone for BoxHandler where - I: 'static, + I: Send + 'static, O: 'static, { fn clone(&self) -> Self { @@ -26,7 +26,7 @@ where } } -#[async_trait] +#[crate::async_trait] impl Handler for BoxHandler where I: Send + 'static, diff --git a/viz-core/src/handler/catch_error.rs b/viz-core/src/handler/catch_error.rs index cf500c7a..9dc49f68 100644 --- a/viz-core/src/handler/catch_error.rs +++ b/viz-core/src/handler/catch_error.rs @@ -1,6 +1,6 @@ use std::marker::PhantomData; -use crate::{async_trait, Handler, IntoResponse, Response, Result}; +use crate::{Handler, IntoResponse, Response, Result}; /// Catches rejected error while calling the handler. #[derive(Debug)] @@ -36,7 +36,7 @@ impl CatchError { } } -#[async_trait] +#[crate::async_trait] impl Handler for CatchError where I: Send + 'static, diff --git a/viz-core/src/handler/catch_unwind.rs b/viz-core/src/handler/catch_unwind.rs index 5797a52b..6ef08f3f 100644 --- a/viz-core/src/handler/catch_unwind.rs +++ b/viz-core/src/handler/catch_unwind.rs @@ -1,4 +1,4 @@ -use crate::{async_trait, future::FutureExt, Handler, IntoResponse, Response, Result}; +use crate::{future::FutureExt, Handler, IntoResponse, Response, Result}; /// Catches unwinding panics while calling the handler. #[derive(Debug, Clone)] @@ -15,7 +15,7 @@ impl CatchUnwind { } } -#[async_trait] +#[crate::async_trait] impl Handler for CatchUnwind where I: Send + 'static, diff --git a/viz-core/src/handler/fn_ext.rs b/viz-core/src/handler/fn_ext.rs index aa1946f1..a69022dc 100644 --- a/viz-core/src/handler/fn_ext.rs +++ b/viz-core/src/handler/fn_ext.rs @@ -1,11 +1,9 @@ -use crate::{async_trait, Request}; - /// A handler with extractors. -#[async_trait] -pub trait FnExt: Send + Sync + 'static { +#[crate::async_trait] +pub trait FnExt: Send + Sync + 'static { /// The returned type after the call operator is used. type Output; /// Performs the call operation. - async fn call(&self, req: Request) -> Self::Output; + async fn call(&self, i: I) -> Self::Output; } diff --git a/viz-core/src/handler/fn_ext_hanlder.rs b/viz-core/src/handler/fn_ext_hanlder.rs index 9d6a6958..08a431e8 100644 --- a/viz-core/src/handler/fn_ext_hanlder.rs +++ b/viz-core/src/handler/fn_ext_hanlder.rs @@ -1,6 +1,6 @@ use std::marker::PhantomData; -use crate::{async_trait, FnExt, FromRequest, Handler, IntoResponse, Request, Result}; +use crate::{FnExt, FromRequest, Handler, IntoResponse, Result}; /// A wrapper of the extractors handler. #[derive(Debug)] @@ -22,17 +22,18 @@ impl FnExtHandler { } } -#[async_trait] -impl Handler for FnExtHandler +#[crate::async_trait] +impl Handler for FnExtHandler where + I: Send + 'static, E: FromRequest + 'static, E::Error: IntoResponse, - H: FnExt>, + H: FnExt>, O: 'static, { type Output = H::Output; - async fn call(&self, req: Request) -> Self::Output { - self.0.call(req).await.map_err(IntoResponse::into_error) + async fn call(&self, i: I) -> Self::Output { + self.0.call(i).await.map_err(IntoResponse::into_error) } } diff --git a/viz-core/src/handler/into_handler.rs b/viz-core/src/handler/into_handler.rs index 46d3351d..179dbc9d 100644 --- a/viz-core/src/handler/into_handler.rs +++ b/viz-core/src/handler/into_handler.rs @@ -1,7 +1,7 @@ -use crate::{handler::FnExtHandler, FnExt, FromRequest, Handler, IntoResponse, Request, Result}; +use crate::{handler::FnExtHandler, FnExt, FromRequest, Handler, IntoResponse, Result}; /// The trait implemented by types that can be converted to a [`Handler`]. -pub trait IntoHandler { +pub trait IntoHandler { /// The target handler. type Handler: Handler; @@ -10,11 +10,12 @@ pub trait IntoHandler { fn into_handler(self) -> Self::Handler; } -impl IntoHandler for H +impl IntoHandler for H where + I: Send + 'static, E: FromRequest + 'static, E::Error: IntoResponse, - H: FnExt>, + H: FnExt>, O: 'static, { type Handler = FnExtHandler; diff --git a/viz-core/src/handler/map.rs b/viz-core/src/handler/map.rs index 84f6c1e5..bbb8b45c 100644 --- a/viz-core/src/handler/map.rs +++ b/viz-core/src/handler/map.rs @@ -1,4 +1,4 @@ -use crate::{async_trait, Handler, Result}; +use crate::{Handler, Result}; /// Maps the `Ok` value of the output if after the handler called. #[derive(Debug, Clone)] @@ -15,7 +15,7 @@ impl Map { } } -#[async_trait] +#[crate::async_trait] impl Handler for Map where I: Send + 'static, diff --git a/viz-core/src/handler/map_err.rs b/viz-core/src/handler/map_err.rs index f284ef4b..54ea3f07 100644 --- a/viz-core/src/handler/map_err.rs +++ b/viz-core/src/handler/map_err.rs @@ -1,4 +1,4 @@ -use crate::{async_trait, Error, Handler, Result}; +use crate::{Error, Handler, Result}; /// Maps the `Err` value of the output if after the handler called. #[derive(Debug, Clone)] @@ -15,7 +15,7 @@ impl MapErr { } } -#[async_trait] +#[crate::async_trait] impl Handler for MapErr where I: Send + 'static, diff --git a/viz-core/src/handler/map_into_response.rs b/viz-core/src/handler/map_into_response.rs index 6f62b879..1e871dd7 100644 --- a/viz-core/src/handler/map_into_response.rs +++ b/viz-core/src/handler/map_into_response.rs @@ -1,4 +1,4 @@ -use crate::{async_trait, Handler, IntoResponse, Response, Result}; +use crate::{Handler, IntoResponse, Response, Result}; /// Maps the handler's output type to the [`Response`]. #[derive(Debug, Clone)] @@ -12,12 +12,12 @@ impl MapInToResponse { } } -#[async_trait] +#[crate::async_trait] impl Handler for MapInToResponse where I: Send + 'static, H: Handler>, - O: IntoResponse + 'static, + O: IntoResponse, { type Output = Result; diff --git a/viz-core/src/handler/or_else.rs b/viz-core/src/handler/or_else.rs index dd5a7ea5..942d6f76 100644 --- a/viz-core/src/handler/or_else.rs +++ b/viz-core/src/handler/or_else.rs @@ -1,4 +1,4 @@ -use crate::{async_trait, Error, Handler, Result}; +use crate::{Error, Handler, Result}; /// Calls `op` if the output is `Err`, otherwise returns the `Ok` value of the output. #[derive(Debug, Clone)] @@ -15,13 +15,13 @@ impl OrElse { } } -#[async_trait] +#[crate::async_trait] impl Handler for OrElse where I: Send + 'static, H: Handler>, F: Handler, - O: Send + 'static, + O: Send, { type Output = F::Output; diff --git a/viz-core/src/handler/service.rs b/viz-core/src/handler/service.rs index f2fa97ac..23bf038e 100644 --- a/viz-core/src/handler/service.rs +++ b/viz-core/src/handler/service.rs @@ -1,8 +1,6 @@ use hyper::service::Service; -use crate::{ - async_trait, Body, BoxError, Bytes, Error, Handler, HttpBody, Request, Response, Result, -}; +use crate::{Body, BoxError, Bytes, Error, Handler, HttpBody, Request, Response, Result}; /// Converts a hyper [`Service`] to a viz [`Handler`]. #[derive(Debug, Clone)] @@ -15,7 +13,7 @@ impl ServiceHandler { } } -#[async_trait] +#[crate::async_trait] impl Handler> for ServiceHandler where I: HttpBody + Send + 'static, diff --git a/viz-core/src/lib.rs b/viz-core/src/lib.rs index 4530108d..b6d7d289 100644 --- a/viz-core/src/lib.rs +++ b/viz-core/src/lib.rs @@ -58,7 +58,7 @@ pub use thiserror::Error as ThisError; #[doc(hidden)] mod tuples { - use super::{async_trait, Error, FnExt, FromRequest, Future, IntoResponse, Request, Result}; + use super::{Error, FnExt, FromRequest, Future, IntoResponse, Request, Result}; tuple_impls!(A B C D E F G H I J K L); } diff --git a/viz-core/src/macros.rs b/viz-core/src/macros.rs index 118b39b1..bde2636a 100644 --- a/viz-core/src/macros.rs +++ b/viz-core/src/macros.rs @@ -8,7 +8,7 @@ macro_rules! tuple_impls { }; // "Private" internal implementation (@impl $( $T:ident )*) => { - #[async_trait] + #[crate::async_trait] impl<$($T,)*> FromRequest for ($($T,)*) where $($T: FromRequest + Send,)* @@ -22,8 +22,8 @@ macro_rules! tuple_impls { } } - #[async_trait] - impl<$($T,)* Fun, Fut, Out> FnExt<($($T,)*)> for Fun + #[crate::async_trait] + impl<$($T,)* Fun, Fut, Out> FnExt for Fun where $($T: FromRequest + Send,)* $($T::Error: IntoResponse + Send,)* diff --git a/viz-core/src/middleware/compression.rs b/viz-core/src/middleware/compression.rs index 96cd4120..b34a9d03 100644 --- a/viz-core/src/middleware/compression.rs +++ b/viz-core/src/middleware/compression.rs @@ -6,7 +6,6 @@ use async_compression::tokio::bufread; use tokio_util::io::{ReaderStream, StreamReader}; use crate::{ - async_trait, header::{HeaderValue, ACCEPT_ENCODING, CONTENT_ENCODING, CONTENT_LENGTH}, Body, Handler, IntoResponse, Request, Response, Result, Transform, }; @@ -32,7 +31,7 @@ pub struct CompressionMiddleware { h: H, } -#[async_trait] +#[crate::async_trait] impl Handler for CompressionMiddleware where H: Handler>, diff --git a/viz-core/src/middleware/cookie.rs b/viz-core/src/middleware/cookie.rs index cdeaaac7..a9f9daf5 100644 --- a/viz-core/src/middleware/cookie.rs +++ b/viz-core/src/middleware/cookie.rs @@ -3,7 +3,6 @@ use std::fmt; use crate::{ - async_trait, header::{HeaderValue, COOKIE, SET_COOKIE}, types::{Cookie, CookieJar, CookieKey, Cookies}, Handler, IntoResponse, Request, Response, Result, Transform, @@ -80,7 +79,7 @@ impl fmt::Debug for CookieMiddleware { } } -#[async_trait] +#[crate::async_trait] impl Handler for CookieMiddleware where H: Handler>, diff --git a/viz-core/src/middleware/cors.rs b/viz-core/src/middleware/cors.rs index 3f0140ad..29e18873 100644 --- a/viz-core/src/middleware/cors.rs +++ b/viz-core/src/middleware/cors.rs @@ -3,7 +3,6 @@ use std::{collections::HashSet, fmt, sync::Arc}; use crate::{ - async_trait, header::{ HeaderMap, HeaderName, HeaderValue, ACCESS_CONTROL_ALLOW_CREDENTIALS, ACCESS_CONTROL_ALLOW_HEADERS, ACCESS_CONTROL_ALLOW_ORIGIN, ACCESS_CONTROL_REQUEST_HEADERS, @@ -203,7 +202,7 @@ pub struct CorsMiddleware { aceh: AccessControlExposeHeaders, } -#[async_trait] +#[crate::async_trait] impl Handler for CorsMiddleware where H: Handler> + Send + Clone + 'static, diff --git a/viz-core/src/middleware/csrf.rs b/viz-core/src/middleware/csrf.rs index 72a64193..b2cdfe8b 100644 --- a/viz-core/src/middleware/csrf.rs +++ b/viz-core/src/middleware/csrf.rs @@ -5,7 +5,6 @@ use std::{collections::HashSet, fmt, sync::Arc}; use base64::Engine as _; use crate::{ - async_trait, header::{HeaderName, HeaderValue, VARY}, middleware::helper::{CookieOptions, Cookieable}, Error, FromRequest, Handler, IntoResponse, Method, Request, RequestExt, Response, Result, @@ -37,7 +36,7 @@ pub enum Store { #[derive(Debug, Clone)] pub struct CsrfToken(pub String); -#[async_trait] +#[crate::async_trait] impl FromRequest for CsrfToken { type Error = Error; @@ -186,7 +185,7 @@ where } } -#[async_trait] +#[crate::async_trait] impl Handler for CsrfMiddleware where H: Handler> + Send + Clone + 'static, diff --git a/viz-core/src/middleware/limits.rs b/viz-core/src/middleware/limits.rs index 3229f3a7..c16ec60d 100644 --- a/viz-core/src/middleware/limits.rs +++ b/viz-core/src/middleware/limits.rs @@ -3,7 +3,7 @@ #[cfg(feature = "multipart")] use std::sync::Arc; -use crate::{async_trait, types, Handler, IntoResponse, Request, Response, Result, Transform}; +use crate::{types, Handler, IntoResponse, Request, Response, Result, Transform}; /// A configuration for [`LimitsMiddleware`]. #[derive(Debug, Clone)] @@ -67,7 +67,7 @@ pub struct LimitsMiddleware { config: Config, } -#[async_trait] +#[crate::async_trait] impl Handler for LimitsMiddleware where H: Handler>, diff --git a/viz-core/src/middleware/otel/metrics.rs b/viz-core/src/middleware/otel/metrics.rs index 6cf1bb55..a981b8c4 100644 --- a/viz-core/src/middleware/otel/metrics.rs +++ b/viz-core/src/middleware/otel/metrics.rs @@ -14,10 +14,7 @@ use opentelemetry_semantic_conventions::trace::{ HTTP_ROUTE, NETWORK_PROTOCOL_VERSION, SERVER_ADDRESS, SERVER_PORT, URL_SCHEME, }; -use crate::{ - async_trait, Handler, IntoResponse, Request, RequestExt, Response, ResponseExt, Result, - Transform, -}; +use crate::{Handler, IntoResponse, Request, RequestExt, Response, ResponseExt, Result, Transform}; const HTTP_SERVER_ACTIVE_REQUESTS: &str = "http.server.active_requests"; const HTTP_SERVER_DURATION: &str = "http.server.duration"; @@ -96,7 +93,7 @@ pub struct MetricsMiddleware { response_size: Histogram, } -#[async_trait] +#[crate::async_trait] impl Handler for MetricsMiddleware where H: Handler>, diff --git a/viz-core/src/middleware/otel/tracing.rs b/viz-core/src/middleware/otel/tracing.rs index 7a8818ef..9de8f394 100644 --- a/viz-core/src/middleware/otel/tracing.rs +++ b/viz-core/src/middleware/otel/tracing.rs @@ -19,7 +19,6 @@ use opentelemetry_semantic_conventions::trace::{ }; use crate::{ - async_trait, header::{HeaderMap, HeaderName}, headers::UserAgent, Handler, IntoResponse, Request, RequestExt, Response, ResponseExt, Result, Transform, @@ -58,7 +57,7 @@ pub struct TracingMiddleware { tracer: Arc, } -#[async_trait] +#[crate::async_trait] impl Handler for TracingMiddleware where H: Handler>, diff --git a/viz-core/src/middleware/session/config.rs b/viz-core/src/middleware/session/config.rs index 7b8d4cb8..21cd72dd 100644 --- a/viz-core/src/middleware/session/config.rs +++ b/viz-core/src/middleware/session/config.rs @@ -5,7 +5,6 @@ use std::{ }; use crate::{ - async_trait, middleware::helper::{CookieOptions, Cookieable}, types::{Cookie, Session}, Error, Handler, IntoResponse, Request, RequestExt, Response, Result, StatusCode, Transform, @@ -89,7 +88,7 @@ where } } -#[async_trait] +#[crate::async_trait] impl Handler for SessionMiddleware where H: Handler>, diff --git a/viz-core/src/request.rs b/viz-core/src/request.rs index 84ae12ba..70aae7e9 100644 --- a/viz-core/src/request.rs +++ b/viz-core/src/request.rs @@ -1,5 +1,5 @@ use crate::{ - async_trait, header, + header, types::{PayloadError, RealIp}, Body, BodyState, Bytes, FromRequest, Request, Result, }; @@ -36,7 +36,7 @@ use crate::types::Session; use crate::types::{ParamsError, PathDeserializer, RouteInfo}; /// The [`Request`] Extension. -#[async_trait] +#[crate::async_trait] pub trait RequestExt: private::Sealed + Sized { /// Get URL's schema of this request. fn schema(&self) -> Option<&http::uri::Scheme>; @@ -193,7 +193,7 @@ pub trait RequestExt: private::Sealed + Sized { fn realip(&self) -> Option; } -#[async_trait] +#[crate::async_trait] impl RequestExt for Request { fn schema(&self) -> Option<&http::uri::Scheme> { self.uri().scheme() diff --git a/viz-core/src/response.rs b/viz-core/src/response.rs index bdd5743c..18ce6a1e 100644 --- a/viz-core/src/response.rs +++ b/viz-core/src/response.rs @@ -1,10 +1,10 @@ use futures_util::Stream; use http_body_util::Full; -use crate::{async_trait, header, Body, BoxError, Bytes, Error, Response, Result, StatusCode}; +use crate::{header, Body, BoxError, Bytes, Error, Response, Result, StatusCode}; /// The [`Response`] Extension. -#[async_trait] +#[crate::async_trait] pub trait ResponseExt: private::Sealed + Sized { /// Get the size of this response's body. fn content_length(&self) -> Option; @@ -186,7 +186,7 @@ pub trait ResponseExt: private::Sealed + Sized { } } -#[async_trait] +#[crate::async_trait] impl ResponseExt for Response { fn content_length(&self) -> Option { self.headers() diff --git a/viz-core/src/types/cookie.rs b/viz-core/src/types/cookie.rs index d59fd7d6..5199ed34 100644 --- a/viz-core/src/types/cookie.rs +++ b/viz-core/src/types/cookie.rs @@ -6,8 +6,7 @@ use std::{ }; use crate::{ - async_trait, Error, FromRequest, IntoResponse, Request, RequestExt, Response, StatusCode, - ThisError, + Error, FromRequest, IntoResponse, Request, RequestExt, Response, StatusCode, ThisError, }; pub use ::cookie::{Cookie, CookieJar, SameSite}; @@ -193,7 +192,7 @@ impl Cookies { } } -#[async_trait] +#[crate::async_trait] impl FromRequest for Cookies { type Error = CookiesError; diff --git a/viz-core/src/types/form.rs b/viz-core/src/types/form.rs index dbaa2bcf..9eb14ed9 100644 --- a/viz-core/src/types/form.rs +++ b/viz-core/src/types/form.rs @@ -7,7 +7,7 @@ use std::{ use serde::de::DeserializeOwned; -use crate::{async_trait, FromRequest, Request, RequestExt, Result}; +use crate::{FromRequest, Request, RequestExt, Result}; use super::{Payload, PayloadError}; @@ -81,7 +81,7 @@ impl Payload for Form { } } -#[async_trait] +#[crate::async_trait] impl FromRequest for Form where T: DeserializeOwned, diff --git a/viz-core/src/types/header.rs b/viz-core/src/types/header.rs index be81c3b8..27aa4694 100644 --- a/viz-core/src/types/header.rs +++ b/viz-core/src/types/header.rs @@ -6,7 +6,7 @@ use std::{ }; use crate::{ - async_trait, header, + header, headers::{self, HeaderMapExt}, Error, FromRequest, IntoResponse, Request, Response, Result, StatusCode, ThisError, }; @@ -66,7 +66,7 @@ where } } -#[async_trait] +#[crate::async_trait] impl FromRequest for Header where T: headers::Header, diff --git a/viz-core/src/types/json.rs b/viz-core/src/types/json.rs index 4ca05130..96a2083a 100644 --- a/viz-core/src/types/json.rs +++ b/viz-core/src/types/json.rs @@ -5,9 +5,7 @@ use std::{ ops::{Deref, DerefMut}, }; -use crate::{ - async_trait, FromRequest, IntoResponse, Request, RequestExt, Response, ResponseExt, Result, -}; +use crate::{FromRequest, IntoResponse, Request, RequestExt, Response, ResponseExt, Result}; use super::{Payload, PayloadError}; @@ -82,7 +80,7 @@ impl Payload for Json { } } -#[async_trait] +#[crate::async_trait] impl FromRequest for Json where T: serde::de::DeserializeOwned, diff --git a/viz-core/src/types/limits.rs b/viz-core/src/types/limits.rs index 96e5a753..821fb524 100644 --- a/viz-core/src/types/limits.rs +++ b/viz-core/src/types/limits.rs @@ -1,6 +1,6 @@ use std::{convert::Infallible, sync::Arc}; -use crate::{async_trait, FromRequest, Request, RequestExt}; +use crate::{FromRequest, Request, RequestExt}; #[cfg(feature = "form")] use super::Form; @@ -81,7 +81,7 @@ impl Limits { } } -#[async_trait] +#[crate::async_trait] impl FromRequest for Limits { type Error = Infallible; diff --git a/viz-core/src/types/multipart.rs b/viz-core/src/types/multipart.rs index 99d9147d..209e05e6 100644 --- a/viz-core/src/types/multipart.rs +++ b/viz-core/src/types/multipart.rs @@ -2,9 +2,7 @@ use form_data::FormData; -use crate::{ - async_trait, Body, Error, FromRequest, IntoResponse, Request, RequestExt, Response, StatusCode, -}; +use crate::{Body, Error, FromRequest, IntoResponse, Request, RequestExt, Response, StatusCode}; use super::{Payload, PayloadError}; @@ -28,7 +26,7 @@ impl Payload for Multipart { } } -#[async_trait] +#[crate::async_trait] impl FromRequest for Multipart { type Error = PayloadError; diff --git a/viz-core/src/types/params.rs b/viz-core/src/types/params.rs index 5eedc294..e5daf16a 100644 --- a/viz-core/src/types/params.rs +++ b/viz-core/src/types/params.rs @@ -11,8 +11,7 @@ use std::{ use serde::de::DeserializeOwned; use crate::{ - async_trait, Error, FromRequest, IntoResponse, Request, RequestExt, Response, StatusCode, - ThisError, + Error, FromRequest, IntoResponse, Request, RequestExt, Response, StatusCode, ThisError, }; pub(crate) use de::PathDeserializer; @@ -77,7 +76,7 @@ impl Params { } } -#[async_trait] +#[crate::async_trait] impl FromRequest for Params where T: DeserializeOwned, diff --git a/viz-core/src/types/query.rs b/viz-core/src/types/query.rs index 9984e099..3026e06c 100644 --- a/viz-core/src/types/query.rs +++ b/viz-core/src/types/query.rs @@ -7,7 +7,7 @@ use std::{ use serde::de::DeserializeOwned; -use crate::{async_trait, types::PayloadError, FromRequest, Request, RequestExt, Result}; +use crate::{types::PayloadError, FromRequest, Request, RequestExt, Result}; /// Extracts the data from the query string of a URL. pub struct Query(pub T); @@ -64,7 +64,7 @@ where } } -#[async_trait] +#[crate::async_trait] impl FromRequest for Query where T: DeserializeOwned, diff --git a/viz-core/src/types/session.rs b/viz-core/src/types/session.rs index 0a6109a1..10d8d1be 100644 --- a/viz-core/src/types/session.rs +++ b/viz-core/src/types/session.rs @@ -14,7 +14,7 @@ use serde_json::{from_value, to_value, Value}; use sessions_core::{Data, State, CHANGED, PURGED, RENEWED, UNCHANGED}; -use crate::{async_trait, Error, FromRequest, IntoResponse, Request, RequestExt, StatusCode}; +use crate::{Error, FromRequest, IntoResponse, Request, RequestExt, StatusCode}; /// A session for the current request. #[derive(Clone)] @@ -170,7 +170,7 @@ impl fmt::Debug for Session { } } -#[async_trait] +#[crate::async_trait] impl FromRequest for Session { type Error = Infallible; diff --git a/viz-core/src/types/state.rs b/viz-core/src/types/state.rs index c916fe1b..b4ee6020 100644 --- a/viz-core/src/types/state.rs +++ b/viz-core/src/types/state.rs @@ -6,8 +6,8 @@ use std::{ }; use crate::{ - async_trait, future::TryFutureExt, handler::Transform, Error, FromRequest, Handler, - IntoResponse, Request, RequestExt, Response, Result, StatusCode, ThisError, + handler::Transform, Error, FromRequest, Handler, IntoResponse, Request, RequestExt, Response, + Result, StatusCode, ThisError, }; /// Extracts state from the extensions of a request. @@ -49,7 +49,7 @@ impl DerefMut for State { } } -#[async_trait] +#[crate::async_trait] impl FromRequest for State where T: Clone + Send + Sync + 'static, @@ -72,19 +72,19 @@ where } } -#[async_trait] +#[crate::async_trait] impl Handler for State<(T, H)> where T: Clone + Send + Sync + 'static, H: Handler>, - O: IntoResponse + 'static, + O: IntoResponse, { type Output = Result; async fn call(&self, mut req: Request) -> Self::Output { let Self((t, h)) = self; req.extensions_mut().insert(t.clone()); - h.call(req).map_ok(IntoResponse::into_response).await + h.call(req).await.map(IntoResponse::into_response) } } diff --git a/viz-core/src/types/websocket.rs b/viz-core/src/types/websocket.rs index 8461a345..675446df 100644 --- a/viz-core/src/types/websocket.rs +++ b/viz-core/src/types/websocket.rs @@ -6,7 +6,6 @@ use hyper::upgrade::{OnUpgrade, Upgraded}; use tokio_tungstenite::tungstenite::protocol::Role; use crate::{ - async_trait, header::{SEC_WEBSOCKET_PROTOCOL, UPGRADE}, headers::{ Connection, HeaderMapExt, HeaderValue, SecWebsocketAccept, SecWebsocketKey, @@ -99,7 +98,7 @@ impl WebSocket { } } -#[async_trait] +#[crate::async_trait] impl FromRequest for WebSocket { type Error = WebSocketError; diff --git a/viz-handlers/src/embed.rs b/viz-handlers/src/embed.rs index 92a74a2f..87b648a2 100644 --- a/viz-handlers/src/embed.rs +++ b/viz-handlers/src/embed.rs @@ -5,7 +5,6 @@ use std::{borrow::Cow, marker::PhantomData}; use http_body_util::Full; use rust_embed::{EmbeddedFile, RustEmbed}; use viz_core::{ - async_trait, header::{CONTENT_TYPE, ETAG, IF_NONE_MATCH}, Handler, IntoResponse, Method, Request, RequestExt, Response, Result, StatusCode, }; @@ -28,7 +27,7 @@ impl File { } } -#[async_trait] +#[viz_core::async_trait] impl Handler for File where E: RustEmbed + Send + Sync + 'static, @@ -36,7 +35,7 @@ where type Output = Result; async fn call(&self, req: Request) -> Self::Output { - serve::(self.0.to_string(), req).await + serve::(self.0.to_string(), req) } } @@ -56,7 +55,7 @@ impl Default for Dir { } } -#[async_trait] +#[viz_core::async_trait] impl Handler for Dir where E: RustEmbed + Send + Sync + 'static, @@ -64,25 +63,22 @@ where type Output = Result; async fn call(&self, req: Request) -> Self::Output { - let path = match req.route_info().params.first().map(|(_, v)| v) { - Some(p) => p, - None => "index.html", - } - .to_string(); - - serve::(path, req).await + serve::( + match req.route_info().params.first().map(|(_, v)| v) { + Some(p) => p, + None => "index.html", + } + .to_string(), + req, + ) } } -#[allow(clippy::unused_async)] -async fn serve(path: String, req: Request) -> Result +fn serve(path: String, req: Request) -> Result where E: RustEmbed + Send + Sync + 'static, { - let method = req.method(); - let headers = req.headers(); - - if method != Method::GET { + if Method::GET != req.method() { Err(StatusCode::METHOD_NOT_ALLOWED.into_error())?; } @@ -90,7 +86,8 @@ where Some(EmbeddedFile { data, metadata }) => { let hash = hex::encode(metadata.sha256_hash()); - if headers + if req + .headers() .get(IF_NONE_MATCH) .map_or(false, |etag| etag.to_str().unwrap_or("000000").eq(&hash)) { diff --git a/viz-handlers/src/prometheus.rs b/viz-handlers/src/prometheus.rs index 1326281c..53dfd7d3 100644 --- a/viz-handlers/src/prometheus.rs +++ b/viz-handlers/src/prometheus.rs @@ -7,7 +7,6 @@ use opentelemetry::{global::handle_error, metrics::MetricsError}; use prometheus::{Encoder, TextEncoder}; use viz_core::{ - async_trait, header::{HeaderValue, CONTENT_TYPE}, Handler, IntoResponse, Request, Response, Result, StatusCode, }; @@ -31,7 +30,7 @@ impl Prometheus { } } -#[async_trait] +#[viz_core::async_trait] impl Handler for Prometheus { type Output = Result; diff --git a/viz-handlers/src/serve.rs b/viz-handlers/src/serve.rs index 2e2a33d8..bbf19671 100644 --- a/viz-handlers/src/serve.rs +++ b/viz-handlers/src/serve.rs @@ -11,7 +11,6 @@ use tokio::io::AsyncReadExt; use tokio_util::io::ReaderStream; use viz_core::{ - async_trait, headers::{ AcceptRanges, ContentLength, ContentRange, ContentType, ETag, HeaderMap, HeaderMapExt, IfMatch, IfModifiedSince, IfNoneMatch, IfUnmodifiedSince, LastModified, Range, @@ -47,7 +46,7 @@ impl File { } } -#[async_trait] +#[viz_core::async_trait] impl Handler for File { type Output = Result; @@ -98,18 +97,17 @@ impl Dir { } } -#[async_trait] +#[viz_core::async_trait] impl Handler for Dir { type Output = Result; async fn call(&self, req: Request) -> Self::Output { - let mut path = self.path.clone(); - if req.method() != Method::GET { Err(Error::MethodNotAllowed)?; } let mut prev = false; + let mut path = self.path.clone(); if let Some(param) = req.route_info().params.first().map(|(_, v)| v) { let p = percent_encoding::percent_decode_str(param) diff --git a/viz-tower/src/layer.rs b/viz-tower/src/layer.rs index ab3e826f..fa3978e8 100644 --- a/viz-tower/src/layer.rs +++ b/viz-tower/src/layer.rs @@ -1,5 +1,3 @@ -use viz_core::Transform; - use crate::Middleware; /// Transforms a Tower layer into Viz Middleware. @@ -13,7 +11,7 @@ impl Layered { } } -impl Transform for Layered +impl viz_core::Transform for Layered where L: Clone, { diff --git a/viz-tower/src/lib.rs b/viz-tower/src/lib.rs index 662d4f9b..94e45b26 100644 --- a/viz-tower/src/lib.rs +++ b/viz-tower/src/lib.rs @@ -1,9 +1,7 @@ //! An adapter that makes a tower [`Service`] into a [`Handler`]. use tower::{Service, ServiceExt}; -use viz_core::{ - async_trait, Body, BoxError, Bytes, Error, Handler, HttpBody, Request, Response, Result, -}; +use viz_core::{Body, BoxError, Bytes, Error, Handler, HttpBody, Request, Response, Result}; mod service; pub use service::HandlerService; @@ -25,7 +23,7 @@ impl ServiceHandler { } } -#[async_trait] +#[viz_core::async_trait] impl Handler for ServiceHandler where O: HttpBody + Send + 'static, diff --git a/viz-tower/src/middleware.rs b/viz-tower/src/middleware.rs index c30c2929..1f868f44 100644 --- a/viz-tower/src/middleware.rs +++ b/viz-tower/src/middleware.rs @@ -1,7 +1,5 @@ use tower::{Layer, Service, ServiceExt}; -use viz_core::{ - async_trait, Body, BoxError, Bytes, Error, Handler, HttpBody, Request, Response, Result, -}; +use viz_core::{Body, BoxError, Bytes, Error, Handler, HttpBody, Request, Response, Result}; use crate::HandlerService; @@ -19,7 +17,7 @@ impl Middleware { } } -#[async_trait] +#[viz_core::async_trait] impl Handler for Middleware where L: Layer> + Send + Sync + 'static,