refactor(http): reduce complexity of Conn::start_send

This commit is contained in:
Sean McArthur
2017-06-23 18:53:30 -07:00
parent 4dfe0db0f4
commit e859f89942

View File

@@ -213,7 +213,7 @@ where I: AsyncRead + AsyncWrite,
} }
} }
fn write_head(&mut self, mut head: http::MessageHead<T::Outgoing>, body: bool) -> StartSend<http::MessageHead<T::Outgoing>,io::Error> { fn write_head(&mut self, mut head: http::MessageHead<T::Outgoing>, body: bool) {
debug_assert!(self.can_write_head()); debug_assert!(self.can_write_head());
if !body { if !body {
head.headers.remove::<TransferEncoding>(); head.headers.remove::<TransferEncoding>();
@@ -233,8 +233,6 @@ where I: AsyncRead + AsyncWrite,
} else { } else {
Writing::KeepAlive Writing::KeepAlive
}; };
Ok(AsyncSink::Ready)
} }
fn write_body(&mut self, chunk: Option<B>) -> StartSend<Option<B>, io::Error> { fn write_body(&mut self, chunk: Option<B>) -> StartSend<Option<B>, io::Error> {
@@ -382,24 +380,15 @@ where I: AsyncRead + AsyncWrite,
type SinkItem = Frame<http::MessageHead<T::Outgoing>, B, ::Error>; type SinkItem = Frame<http::MessageHead<T::Outgoing>, B, ::Error>;
type SinkError = io::Error; type SinkError = io::Error;
#[inline]
fn start_send(&mut self, frame: Self::SinkItem) -> StartSend<Self::SinkItem, Self::SinkError> { fn start_send(&mut self, frame: Self::SinkItem) -> StartSend<Self::SinkItem, Self::SinkError> {
trace!("Conn::start_send( frame={:?} )", DebugFrame(&frame)); trace!("Conn::start_send( frame={:?} )", DebugFrame(&frame));
let frame: Self::SinkItem = match frame { let frame: Self::SinkItem = match frame {
Frame::Message { message: head, body } => { Frame::Message { message: head, body } => {
if self.can_write_head() { if self.can_write_head() {
return self.write_head(head, body) self.write_head(head, body);
.map(|async| { return Ok(AsyncSink::Ready);
match async {
AsyncSink::Ready => AsyncSink::Ready,
AsyncSink::NotReady(head) => {
AsyncSink::NotReady(Frame::Message {
message: head,
body: body,
})
}
}
})
} else { } else {
Frame::Message { message: head, body: body } Frame::Message { message: head, body: body }
} }