diff options
| author | Edward Barnard | 2015-08-28 18:58:38 +0700 |
|---|---|---|
| committer | Edward Barnard | 2015-08-28 18:58:38 +0700 |
| commit | b5ad734bd68454fcb304a555bd2b1f0bb3274ec9 (patch) | |
| tree | 1a49349cb59211402d15d4e2335faca2a4385dae /src/lib.rs | |
| parent | 0c2ad6b0d12524b7042d45a92c1b20d8082c662c (diff) | |
| download | rust-plist-b5ad734bd68454fcb304a555bd2b1f0bb3274ec9.tar.bz2 | |
Add StartPlist and EndPlist events
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -26,6 +26,9 @@ pub enum Plist { #[derive(Debug, PartialEq)] pub enum PlistEvent { + StartPlist, + EndPlist, + StartArray(Option<u64>), EndArray, @@ -153,10 +156,15 @@ impl<T:Iterator<Item=PlistEvent>> Builder<T> { pub fn build(mut self) -> BuilderResult<Plist> { self.bump(); + if let Some(PlistEvent::StartPlist) = self.token { + self.bump(); + } + let plist = try!(self.build_value()); self.bump(); match self.token { None => (), + Some(PlistEvent::EndPlist) => self.bump(), // The stream should have finished _ => return Err(BuilderError::InvalidEvent) }; @@ -169,6 +177,9 @@ impl<T:Iterator<Item=PlistEvent>> Builder<T> { fn build_value(&mut self) -> BuilderResult<Plist> { match self.token.take() { + Some(PlistEvent::StartPlist) => Err(BuilderError::InvalidEvent), + Some(PlistEvent::EndPlist) => Err(BuilderError::InvalidEvent), + Some(PlistEvent::StartArray(len)) => Ok(Plist::Array(try!(self.build_array(len)))), Some(PlistEvent::StartDictionary(len)) => Ok(Plist::Dictionary(try!(self.build_dict(len)))), @@ -240,6 +251,7 @@ mod tests { // Input let events = vec![ + StartPlist, StartDictionary(None), StringValue("Author".to_owned()), StringValue("William Shakespeare".to_owned()), @@ -252,7 +264,8 @@ mod tests { IntegerValue(1564), StringValue("Height".to_owned()), RealValue(1.60), - EndDictionary + EndDictionary, + EndPlist, ]; let builder = Builder::from_event_stream(events.into_iter()); |
