From cd88ff518a9c5495bff0a5e64392aa4efabf5cef Mon Sep 17 00:00:00 2001 From: fakeshadow <24548779@qq.com> Date: Wed, 21 Feb 2024 05:02:11 +0800 Subject: [PATCH] add shortcut for respond with body type. --- web/src/body.rs | 6 ++++-- web/src/handler/impls.rs | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/web/src/body.rs b/web/src/body.rs index 273ac1bf..e3a01087 100644 --- a/web/src/body.rs +++ b/web/src/body.rs @@ -49,9 +49,11 @@ mod nightly { } - impl From for AsyncBody + impl From for AsyncBody where - B: AsyncIterator, + B: AsyncIterator> + 'static, + E: Into, + Bytes: From, { fn from(inner: B) -> Self { Self { inner } diff --git a/web/src/handler/impls.rs b/web/src/handler/impls.rs index 1cb3e01f..7ca30acd 100644 --- a/web/src/handler/impls.rs +++ b/web/src/handler/impls.rs @@ -4,7 +4,7 @@ use crate::{ body::ResponseBody, context::WebContext, error::{Error, ErrorStatus}, - http::{Method, RequestExt, StatusCode, WebRequest, WebResponse}, + http::{IntoResponse, Method, RequestExt, StatusCode, WebRequest, WebResponse}, }; use super::{FromRequest, Responder}; @@ -163,6 +163,21 @@ impl<'r, C, B, ResB> Responder> for WebResponse { } } +impl<'r, C, B, ResB> Responder> for ResponseBody { + type Response = WebResponse>; + type Error = Error; + + #[inline] + async fn respond(self, ctx: WebContext<'r, C, B>) -> Result { + Ok(ctx.req.as_response(self)) + } + + #[inline] + fn map(self, res: Self::Response) -> Result { + Ok(res.map(|_| self)) + } +} + impl<'r, C, B> Responder> for Error { type Response = WebResponse; type Error = Error;