aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTill Hoeppner2015-07-28 01:04:59 +0200
committerTill Hoeppner2015-07-28 01:04:59 +0200
commit434048f7252c2490f04866c9a08eff6eb1688dc3 (patch)
treebb02d903b0ff36ab72ed7be4032395307efcd909
parent01703f2dcd807f58c03a83bf1d3fa52e8023a0ad (diff)
downloadilc-434048f7252c2490f04866c9a08eff6eb1688dc3.tar.gz
ilc-434048f7252c2490f04866c9a08eff6eb1688dc3.tar.xz
ilc-434048f7252c2490f04866c9a08eff6eb1688dc3.zip
Properly handle EOF while reading msgpack markers
If there's no more data, we stop returning events. This will still error on EOF while reading msgpack data though, which is sort-of intended.
-rw-r--r--src/format/msgpack.rs8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/format/msgpack.rs b/src/format/msgpack.rs
index d823a6d..09bd2bb 100644
--- a/src/format/msgpack.rs
+++ b/src/format/msgpack.rs
@@ -33,8 +33,12 @@ pub struct Iter<'a, R: 'a> where R: BufRead {
impl<'a, R: 'a> Iterator for Iter<'a, R> where R: BufRead {
type Item = ::Result<Event<'a>>;
fn next(&mut self) -> Option<::Result<Event<'a>>> {
- Some(Decodable::decode(&mut Decoder::new(&mut self.input))
- .map_err(|e| ::IlcError::MsgpackDecode(e)))
+ use msgpack::decode;
+ match Event::decode(&mut Decoder::new(&mut self.input)) {
+ Ok(e) => Some(Ok(e)),
+ Err(decode::serialize::Error::InvalidMarkerRead(decode::ReadError::UnexpectedEOF)) => None,
+ Err(e) => Some(Err(::IlcError::MsgpackDecode(e)))
+ }
}
}