aboutsummaryrefslogtreecommitdiffstats
path: root/src/binary
diff options
context:
space:
mode:
Diffstat (limited to 'src/binary')
-rw-r--r--src/binary/reader.rs24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/binary/reader.rs b/src/binary/reader.rs
index 75c7535..837f216 100644
--- a/src/binary/reader.rs
+++ b/src/binary/reader.rs
@@ -38,7 +38,8 @@ pub struct StreamingParser<R> {
stack: Vec<StackItem>,
object_offsets: Vec<u64>,
reader: R,
- ref_size: u8
+ ref_size: u8,
+ finished: bool
}
impl<R: Read+Seek> StreamingParser<R> {
@@ -47,7 +48,8 @@ impl<R: Read+Seek> StreamingParser<R> {
stack: Vec::new(),
object_offsets: Vec::new(),
reader: reader,
- ref_size: 0
+ ref_size: 0,
+ finished: false
}
}
@@ -262,10 +264,20 @@ impl<R: Read+Seek> Iterator for StreamingParser<R> {
type Item = ParserResult<PlistEvent>;
fn next(&mut self) -> Option<ParserResult<PlistEvent>> {
- match self.read_next() {
- Ok(Some(result)) => Some(Ok(result)),
- Err(err) => Some(Err(err)),
- Ok(None) => None
+ if self.finished {
+ None
+ } else {
+ match self.read_next() {
+ Ok(Some(event)) => Some(Ok(event)),
+ Err(err) => {
+ self.finished = true;
+ Some(Err(err))
+ },
+ Ok(None) => {
+ self.finished = true;
+ None
+ }
+ }
}
}
}