From 3e2ae39ef4d81d986830218e000e65eb0dce9c94 Mon Sep 17 00:00:00 2001 From: Edward Barnard Date: Fri, 6 Nov 2015 21:37:55 +0000 Subject: Add Plist::into_events --- src/lib.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index be8cb45..ca9fdab 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -31,6 +31,38 @@ use rustc_serialize::base64::{STANDARD, ToBase64}; use rustc_serialize::json::Json as RustcJson; impl Plist { + pub fn into_events(self) -> Vec { + let mut events = Vec::new(); + self.into_events_inner(&mut events); + events + } + + fn into_events_inner(self, events: &mut Vec) { + match self { + Plist::Array(array) => { + events.push(PlistEvent::StartArray(Some(array.len() as u64))); + for value in array.into_iter() { + value.into_events_inner(events); + } + events.push(PlistEvent::EndArray); + }, + Plist::Dictionary(dict) => { + events.push(PlistEvent::StartDictionary(Some(dict.len() as u64))); + for (key, value) in dict.into_iter() { + events.push(PlistEvent::StringValue(key)); + value.into_events_inner(events); + } + events.push(PlistEvent::EndDictionary); + }, + Plist::Boolean(value) => events.push(PlistEvent::BooleanValue(value)), + Plist::Data(value) => events.push(PlistEvent::DataValue(value)), + Plist::Date(value) => events.push(PlistEvent::DateValue(value)), + Plist::Real(value) => events.push(PlistEvent::RealValue(value)), + Plist::Integer(value) => events.push(PlistEvent::IntegerValue(value)), + Plist::String(value) => events.push(PlistEvent::StringValue(value)), + } + } + pub fn into_rustc_serialize_json(self) -> RustcJson { match self { Plist::Array(value) => RustcJson::Array(value.into_iter().map(|p| p.into_rustc_serialize_json()).collect()), -- cgit v1.2.3