From 0dbd16511b6903b021e0860218516b2ec2a7ab22 Mon Sep 17 00:00:00 2001 From: Rob Ede Date: Fri, 12 Feb 2021 03:58:21 +0000 Subject: [PATCH] wat --- actix-http/src/http_message.rs | 4 +++- awc/src/response.rs | 13 ++++++++----- tests/test_server.rs | 11 +++++++---- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/actix-http/src/http_message.rs b/actix-http/src/http_message.rs index 1a0983df8..577de8d59 100644 --- a/actix-http/src/http_message.rs +++ b/actix-http/src/http_message.rs @@ -107,8 +107,9 @@ pub trait HttpMessage: Sized { /// Load request cookies. #[cfg(feature = "cookies")] - #[inline] fn cookies(&self) -> Result>>, CookieParseError> { + eprintln!("default impl cookies?"); + if self.extensions().get::().is_none() { let mut cookies = Vec::new(); for hdr in self.headers().get_all(header::COOKIE) { @@ -122,6 +123,7 @@ pub trait HttpMessage: Sized { } self.extensions_mut().insert(Cookies(cookies)); } + Ok(Ref::map(self.extensions(), |ext| { &ext.get::().unwrap().0 })) diff --git a/awc/src/response.rs b/awc/src/response.rs index faf89192e..242bdb623 100644 --- a/awc/src/response.rs +++ b/awc/src/response.rs @@ -1,4 +1,4 @@ -use std::cell::{Ref, RefMut}; +use std::{cell::{Ref, RefMut}, mem}; use std::fmt; use std::future::Future; use std::marker::PhantomData; @@ -11,11 +11,12 @@ use futures_core::{ready, Stream}; use actix_http::error::PayloadError; use actix_http::http::header; use actix_http::http::{HeaderMap, StatusCode, Version}; -#[cfg(feature = "cookies")] -use actix_http::{cookie::Cookie, error::CookieParseError}; use actix_http::{Extensions, HttpMessage, Payload, PayloadStream, ResponseHead}; use serde::de::DeserializeOwned; +#[cfg(feature = "cookies")] +use actix_http::{cookie::Cookie, error::CookieParseError}; + use crate::error::JsonPayloadError; /// Client Response @@ -40,16 +41,18 @@ impl HttpMessage for ClientResponse { } fn take_payload(&mut self) -> Payload { - std::mem::replace(&mut self.payload, Payload::None) + mem::replace(&mut self.payload, Payload::None) } /// Load request cookies. #[cfg(feature = "cookies")] - #[inline] fn cookies(&self) -> Result>>, CookieParseError> { + eprintln!("awc fn cookies"); + struct Cookies(Vec>); if self.extensions().get::().is_none() { + eprintln!("no cookies, inserting"); let mut cookies = Vec::new(); for hdr in self.headers().get_all(&header::SET_COOKIE) { let s = std::str::from_utf8(hdr.as_bytes()).map_err(CookieParseError::from)?; diff --git a/tests/test_server.rs b/tests/test_server.rs index c2caa9eb2..6bf8dbcb6 100644 --- a/tests/test_server.rs +++ b/tests/test_server.rs @@ -806,15 +806,18 @@ async fn test_server_cookies() { })) }); + let req = srv.get("/"); + let res = req.send().await.unwrap(); + assert!(res.status().is_success()); + + eprintln!("{:?}", &res); + let first_cookie = http::CookieBuilder::new("first", "first_value") .http_only(true) .finish(); let second_cookie = http::Cookie::new("second", "second_value"); - let req = srv.get("/"); - let res = req.send().await.unwrap(); - assert!(res.status().is_success()); - + eprintln!("gimme cookie"); let cookies = res.cookies().expect("To have cookies"); assert_eq!(cookies.len(), 2); if cookies[0] == first_cookie {