mirror of
https://github.com/fafhrd91/actix-web
synced 2024-11-28 01:52:57 +01:00
add h1/h2 payload
This commit is contained in:
parent
c4596b0bd6
commit
7d49a07f91
@ -85,6 +85,7 @@ mod service;
|
||||
pub mod error;
|
||||
pub mod h1;
|
||||
pub mod h2;
|
||||
pub mod payload;
|
||||
pub mod test;
|
||||
pub mod ws;
|
||||
|
||||
|
32
src/payload.rs
Normal file
32
src/payload.rs
Normal file
@ -0,0 +1,32 @@
|
||||
use bytes::Bytes;
|
||||
use derive_more::From;
|
||||
use futures::{Poll, Stream};
|
||||
use h2::RecvStream;
|
||||
|
||||
use crate::error::PayloadError;
|
||||
|
||||
#[derive(From)]
|
||||
pub enum Payload {
|
||||
H1(crate::h1::Payload),
|
||||
H2(crate::h2::Payload),
|
||||
Dyn(Box<Stream<Item = Bytes, Error = PayloadError>>),
|
||||
}
|
||||
|
||||
impl From<RecvStream> for Payload {
|
||||
fn from(v: RecvStream) -> Self {
|
||||
Payload::H2(crate::h2::Payload::new(v))
|
||||
}
|
||||
}
|
||||
|
||||
impl Stream for Payload {
|
||||
type Item = Bytes;
|
||||
type Error = PayloadError;
|
||||
|
||||
fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
|
||||
match self {
|
||||
Payload::H1(ref mut pl) => pl.poll(),
|
||||
Payload::H2(ref mut pl) => pl.poll(),
|
||||
Payload::Dyn(ref mut pl) => pl.poll(),
|
||||
}
|
||||
}
|
||||
}
|
@ -10,8 +10,7 @@ use crate::error::PayloadError;
|
||||
use crate::extensions::Extensions;
|
||||
use crate::httpmessage::HttpMessage;
|
||||
use crate::message::{Message, MessagePool, RequestHead};
|
||||
|
||||
use crate::h1::Payload;
|
||||
use crate::payload::Payload;
|
||||
|
||||
/// Request
|
||||
pub struct Request<P = Payload> {
|
||||
@ -39,7 +38,7 @@ impl Request<Payload> {
|
||||
/// Create new Request instance
|
||||
pub fn new() -> Request<Payload> {
|
||||
Request {
|
||||
payload: Some(Payload::empty()),
|
||||
payload: None,
|
||||
inner: MessagePool::get_message(),
|
||||
}
|
||||
}
|
||||
@ -55,9 +54,12 @@ impl<Payload> Request<Payload> {
|
||||
}
|
||||
|
||||
/// Create new Request instance
|
||||
pub fn set_payload<P>(self, payload: P) -> Request<P> {
|
||||
pub fn set_payload<I, P>(self, payload: I) -> Request<P>
|
||||
where
|
||||
I: Into<P>,
|
||||
{
|
||||
Request {
|
||||
payload: Some(payload),
|
||||
payload: Some(payload.into()),
|
||||
inner: self.inner.clone(),
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,3 @@
|
||||
use h2::RecvStream;
|
||||
|
||||
mod senderror;
|
||||
|
||||
pub use self::senderror::{SendError, SendResponse};
|
||||
|
@ -6,8 +6,8 @@ use cookie::Cookie;
|
||||
use http::header::HeaderName;
|
||||
use http::{HeaderMap, HttpTryFrom, Method, Uri, Version};
|
||||
|
||||
use crate::h1::Payload;
|
||||
use crate::header::{Header, IntoHeaderValue};
|
||||
use crate::payload::Payload;
|
||||
use crate::Request;
|
||||
|
||||
/// Test `Request` builder
|
||||
@ -125,9 +125,9 @@ impl TestRequest {
|
||||
|
||||
/// Set request payload
|
||||
pub fn set_payload<B: Into<Bytes>>(mut self, data: B) -> Self {
|
||||
let mut payload = Payload::empty();
|
||||
let mut payload = crate::h1::Payload::empty();
|
||||
payload.unread_data(data.into());
|
||||
self.payload = Some(payload);
|
||||
self.payload = Some(payload.into());
|
||||
self
|
||||
}
|
||||
|
||||
@ -151,7 +151,7 @@ impl TestRequest {
|
||||
let mut req = if let Some(pl) = payload {
|
||||
Request::with_payload(pl)
|
||||
} else {
|
||||
Request::with_payload(Payload::empty())
|
||||
Request::with_payload(crate::h1::Payload::empty().into())
|
||||
};
|
||||
|
||||
let inner = req.inner_mut();
|
||||
|
Loading…
Reference in New Issue
Block a user