mirror of
https://github.com/fafhrd91/actix-web
synced 2024-11-27 17:52:56 +01:00
adopt MessageBody Pin changes to actix-web root
This commit is contained in:
parent
e5f2feec45
commit
77058ef779
@ -238,15 +238,20 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
use pin_project::{pin_project, pinned_drop};
|
||||||
|
|
||||||
|
#[pin_project(PinnedDrop)]
|
||||||
pub struct StreamLog<B> {
|
pub struct StreamLog<B> {
|
||||||
|
#[pin]
|
||||||
body: ResponseBody<B>,
|
body: ResponseBody<B>,
|
||||||
format: Option<Format>,
|
format: Option<Format>,
|
||||||
size: usize,
|
size: usize,
|
||||||
time: OffsetDateTime,
|
time: OffsetDateTime,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<B> Drop for StreamLog<B> {
|
#[pinned_drop]
|
||||||
fn drop(&mut self) {
|
impl<B> PinnedDrop for StreamLog<B> {
|
||||||
|
fn drop(self: Pin<&mut Self>) {
|
||||||
if let Some(ref format) = self.format {
|
if let Some(ref format) = self.format {
|
||||||
let render = |fmt: &mut Formatter<'_>| {
|
let render = |fmt: &mut Formatter<'_>| {
|
||||||
for unit in &format.0 {
|
for unit in &format.0 {
|
||||||
@ -259,15 +264,17 @@ impl<B> Drop for StreamLog<B> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
impl<B: MessageBody> MessageBody for StreamLog<B> {
|
impl<B: MessageBody> MessageBody for StreamLog<B> {
|
||||||
fn size(&self) -> BodySize {
|
fn size(&self) -> BodySize {
|
||||||
self.body.size()
|
self.body.size()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn poll_next(&mut self, cx: &mut Context<'_>) -> Poll<Option<Result<Bytes, Error>>> {
|
fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Result<Bytes, Error>>> {
|
||||||
match self.body.poll_next(cx) {
|
let this = self.project();
|
||||||
|
match this.body.poll_next(cx) {
|
||||||
Poll::Ready(Some(Ok(chunk))) => {
|
Poll::Ready(Some(Ok(chunk))) => {
|
||||||
self.size += chunk.len();
|
*this.size += chunk.len();
|
||||||
Poll::Ready(Some(Ok(chunk)))
|
Poll::Ready(Some(Ok(chunk)))
|
||||||
}
|
}
|
||||||
val => val,
|
val => val,
|
||||||
|
@ -150,7 +150,7 @@ where
|
|||||||
pub async fn read_response<S, B>(app: &mut S, req: Request) -> Bytes
|
pub async fn read_response<S, B>(app: &mut S, req: Request) -> Bytes
|
||||||
where
|
where
|
||||||
S: Service<Request = Request, Response = ServiceResponse<B>, Error = Error>,
|
S: Service<Request = Request, Response = ServiceResponse<B>, Error = Error>,
|
||||||
B: MessageBody,
|
B: MessageBody + Unpin,
|
||||||
{
|
{
|
||||||
let mut resp = app
|
let mut resp = app
|
||||||
.call(req)
|
.call(req)
|
||||||
@ -193,7 +193,7 @@ where
|
|||||||
/// ```
|
/// ```
|
||||||
pub async fn read_body<B>(mut res: ServiceResponse<B>) -> Bytes
|
pub async fn read_body<B>(mut res: ServiceResponse<B>) -> Bytes
|
||||||
where
|
where
|
||||||
B: MessageBody,
|
B: MessageBody + Unpin,
|
||||||
{
|
{
|
||||||
let mut body = res.take_body();
|
let mut body = res.take_body();
|
||||||
let mut bytes = BytesMut::new();
|
let mut bytes = BytesMut::new();
|
||||||
@ -251,7 +251,7 @@ where
|
|||||||
pub async fn read_response_json<S, B, T>(app: &mut S, req: Request) -> T
|
pub async fn read_response_json<S, B, T>(app: &mut S, req: Request) -> T
|
||||||
where
|
where
|
||||||
S: Service<Request = Request, Response = ServiceResponse<B>, Error = Error>,
|
S: Service<Request = Request, Response = ServiceResponse<B>, Error = Error>,
|
||||||
B: MessageBody,
|
B: MessageBody + Unpin,
|
||||||
T: DeserializeOwned,
|
T: DeserializeOwned,
|
||||||
{
|
{
|
||||||
let body = read_response(app, req).await;
|
let body = read_response(app, req).await;
|
||||||
|
Loading…
Reference in New Issue
Block a user