1
0
Fork 0
mirror of https://github.com/actix/actix-web.git synced 2024-06-10 17:29:36 +00:00
actix-web/actix-http/src/h2/mod.rs

47 lines
1.1 KiB
Rust
Raw Normal View History

2019-02-06 19:44:15 +00:00
#![allow(dead_code, unused_imports)]
2019-02-02 04:18:44 +00:00
use std::fmt;
2019-02-06 19:44:15 +00:00
use bytes::Bytes;
use futures::{Async, Poll, Stream};
use h2::RecvStream;
mod dispatcher;
2019-02-02 04:18:44 +00:00
mod service;
2019-03-07 06:56:34 +00:00
pub use self::dispatcher::Dispatcher;
2019-02-06 19:44:15 +00:00
pub use self::service::H2Service;
use crate::error::PayloadError;
/// H2 receive stream
pub struct Payload {
pl: RecvStream,
}
impl Payload {
pub(crate) fn new(pl: RecvStream) -> Self {
Self { pl }
}
}
impl Stream for Payload {
type Item = Bytes;
type Error = PayloadError;
fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
match self.pl.poll() {
Ok(Async::Ready(Some(chunk))) => {
let len = chunk.len();
if let Err(err) = self.pl.release_capacity().release_capacity(len) {
Err(err.into())
} else {
Ok(Async::Ready(Some(chunk)))
}
}
Ok(Async::Ready(None)) => Ok(Async::Ready(None)),
Ok(Async::NotReady) => Ok(Async::NotReady),
Err(err) => Err(err.into()),
2019-02-06 19:44:15 +00:00
}
}
}