refactor(proto): return Error::Incomplete instead of UnexpectedEof
This commit is contained in:
		| @@ -58,6 +58,21 @@ where I: AsyncRead + AsyncWrite, | |||||||
|     fn poll_incoming(&mut self) -> Poll<Option<Frame<super::MessageHead<T::Incoming>, super::Chunk, ::Error>>, io::Error> { |     fn poll_incoming(&mut self) -> Poll<Option<Frame<super::MessageHead<T::Incoming>, super::Chunk, ::Error>>, io::Error> { | ||||||
|         trace!("Conn::poll_incoming()"); |         trace!("Conn::poll_incoming()"); | ||||||
|  |  | ||||||
|  |         #[derive(Debug)] | ||||||
|  |         struct ParseEof; | ||||||
|  |  | ||||||
|  |         impl fmt::Display for ParseEof { | ||||||
|  |             fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | ||||||
|  |                 f.write_str(::std::error::Error::description(self)) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         impl ::std::error::Error for ParseEof { | ||||||
|  |             fn description(&self) -> &str { | ||||||
|  |                 "end of file reached before parsing could complete" | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|         loop { |         loop { | ||||||
|             if self.is_read_closed() { |             if self.is_read_closed() { | ||||||
|                 trace!("Conn::poll when closed"); |                 trace!("Conn::poll when closed"); | ||||||
| @@ -73,6 +88,9 @@ where I: AsyncRead + AsyncWrite, | |||||||
|                     Ok(Async::Ready(None)) => Ok(Async::Ready(None)), |                     Ok(Async::Ready(None)) => Ok(Async::Ready(None)), | ||||||
|                     Ok(Async::NotReady) => Ok(Async::NotReady), |                     Ok(Async::NotReady) => Ok(Async::NotReady), | ||||||
|                     Err(::Error::Io(err)) => Err(err), |                     Err(::Error::Io(err)) => Err(err), | ||||||
|  |                     Err(::Error::Incomplete) => { | ||||||
|  |                         Err(io::Error::new(io::ErrorKind::UnexpectedEof, ParseEof)) | ||||||
|  |                     }, | ||||||
|                     Err(err) => Ok(Async::Ready(Some(Frame::Error { |                     Err(err) => Ok(Async::Ready(Some(Frame::Error { | ||||||
|                         error: err, |                         error: err, | ||||||
|                     }))), |                     }))), | ||||||
|   | |||||||
| @@ -84,8 +84,7 @@ impl<T: AsyncRead + AsyncWrite> Buffered<T> { | |||||||
|             match try_ready!(self.read_from_io()) { |             match try_ready!(self.read_from_io()) { | ||||||
|                 0 => { |                 0 => { | ||||||
|                     trace!("parse eof"); |                     trace!("parse eof"); | ||||||
|                     //TODO: utilize Error::Incomplete when Error type is redesigned |                     return Err(::Error::Incomplete); | ||||||
|                     return Err(io::Error::new(io::ErrorKind::UnexpectedEof, ParseEof).into()); |  | ||||||
|                 } |                 } | ||||||
|                 _ => {}, |                 _ => {}, | ||||||
|             } |             } | ||||||
| @@ -333,21 +332,6 @@ impl WriteBuf { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Debug)] |  | ||||||
| struct ParseEof; |  | ||||||
|  |  | ||||||
| impl fmt::Display for ParseEof { |  | ||||||
|     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |  | ||||||
|         f.write_str(::std::error::Error::description(self)) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| impl ::std::error::Error for ParseEof { |  | ||||||
|     fn description(&self) -> &str { |  | ||||||
|         "end of file reached before parsing could complete" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // TODO: Move tests to their own mod | // TODO: Move tests to their own mod | ||||||
| #[cfg(test)] | #[cfg(test)] | ||||||
| use std::io::Read; | use std::io::Read; | ||||||
|   | |||||||
| @@ -425,7 +425,7 @@ test! { | |||||||
|             body: None, |             body: None, | ||||||
|             proxy: false, |             proxy: false, | ||||||
|         error: |err| match err { |         error: |err| match err { | ||||||
|             &hyper::Error::Io(_) => true, |             &hyper::Error::Incomplete => true, | ||||||
|             _ => false, |             _ => false, | ||||||
|         }, |         }, | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user