diff options
| author | Edward Barnard | 2015-12-22 11:39:19 +0000 |
|---|---|---|
| committer | Edward Barnard | 2015-12-22 11:39:19 +0000 |
| commit | 139c96123b04c2ed34d17cd0864ef5ae66676ef4 (patch) | |
| tree | 744c99d2a907243f474662677272be57638d200b /src | |
| parent | 3e2ae39ef4d81d986830218e000e65eb0dce9c94 (diff) | |
| download | rust-plist-139c96123b04c2ed34d17cd0864ef5ae66676ef4.tar.bz2 | |
Rename StreamingParser to EventReader and Writer to EventWriter
Diffstat (limited to 'src')
| -rw-r--r-- | src/binary/mod.rs | 2 | ||||
| -rw-r--r-- | src/binary/reader.rs | 64 | ||||
| -rw-r--r-- | src/builder.rs | 20 | ||||
| -rw-r--r-- | src/lib.rs | 42 | ||||
| -rw-r--r-- | src/xml/mod.rs | 4 | ||||
| -rw-r--r-- | src/xml/reader.rs | 48 | ||||
| -rw-r--r-- | src/xml/writer.rs | 16 |
7 files changed, 98 insertions, 98 deletions
diff --git a/src/binary/mod.rs b/src/binary/mod.rs index 0ac39d4..460dbd8 100644 --- a/src/binary/mod.rs +++ b/src/binary/mod.rs @@ -1,3 +1,3 @@ mod reader; -pub use self::reader::StreamingParser;
\ No newline at end of file +pub use self::reader::EventReader;
\ No newline at end of file diff --git a/src/binary/reader.rs b/src/binary/reader.rs index 837f216..11c20cc 100644 --- a/src/binary/reader.rs +++ b/src/binary/reader.rs @@ -4,20 +4,20 @@ use chrono::{TimeZone, UTC}; use std::io::{Cursor, Read, Seek, SeekFrom}; use std::string::FromUtf16Error; -use {ParserError, ParserResult, PlistEvent}; +use {ReadError, ReadResult, PlistEvent}; -impl From<ByteorderError> for ParserError { - fn from(err: ByteorderError) -> ParserError { +impl From<ByteorderError> for ReadError { + fn from(err: ByteorderError) -> ReadError { match err { - ByteorderError::UnexpectedEOF => ParserError::UnexpectedEof, - ByteorderError::Io(err) => ParserError::Io(err) + ByteorderError::UnexpectedEOF => ReadError::UnexpectedEof, + ByteorderError::Io(err) => ReadError::Io(err) } } } -impl From<FromUtf16Error> for ParserError { - fn from(_: FromUtf16Error) -> ParserError { - ParserError::InvalidData +impl From<FromUtf16Error> for ReadError { + fn from(_: FromUtf16Error) -> ReadError { + ReadError::InvalidData } } @@ -34,7 +34,7 @@ enum StackType { /// https://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c /// https://hg.python.org/cpython/file/3.4/Lib/plistlib.py -pub struct StreamingParser<R> { +pub struct EventReader<R> { stack: Vec<StackItem>, object_offsets: Vec<u64>, reader: R, @@ -42,9 +42,9 @@ pub struct StreamingParser<R> { finished: bool } -impl<R: Read+Seek> StreamingParser<R> { - pub fn new(reader: R) -> StreamingParser<R> { - StreamingParser { +impl<R: Read+Seek> EventReader<R> { + pub fn new(reader: R) -> EventReader<R> { + EventReader { stack: Vec::new(), object_offsets: Vec::new(), reader: reader, @@ -53,7 +53,7 @@ impl<R: Read+Seek> StreamingParser<R> { } } - fn read_trailer(&mut self) -> ParserResult<()> { + fn read_trailer(&mut self) -> ReadResult<()> { try!(self.reader.seek(SeekFrom::Start(0))); let mut magic = [0; 8]; try!(self.reader.read(&mut magic)); @@ -81,7 +81,7 @@ impl<R: Read+Seek> StreamingParser<R> { Ok(()) } - fn read_ints(&mut self, len: u64, size: u8) -> ParserResult<Vec<u64>> { + fn read_ints(&mut self, len: u64, size: u8) -> ReadResult<Vec<u64>> { let mut ints = Vec::with_capacity(len as usize); // TODO: Is the match hoisted out of the loop? for _ in 0..len { @@ -90,18 +90,18 @@ impl<R: Read+Seek> StreamingParser<R> { 2 => ints.push(try!(self.reader.read_u16::<BigEndian>()) as u64), 4 => ints.push(try!(self.reader.read_u32::<BigEndian>()) as u64), 8 => ints.push(try!(self.reader.read_u64::<BigEndian>()) as u64), - _ => return Err(ParserError::InvalidData) + _ => return Err(ReadError::InvalidData) } } Ok(ints) } - fn read_refs(&mut self, len: u64) -> ParserResult<Vec<u64>> { + fn read_refs(&mut self, len: u64) -> ReadResult<Vec<u64>> { let ref_size = self.ref_size; self.read_ints(len, ref_size) } - fn read_object_len(&mut self, len: u8) -> ParserResult<u64> { + fn read_object_len(&mut self, len: u8) -> ReadResult<u64> { if (len & 0xf) == 0xf { let len_power_of_two = try!(self.reader.read_u8()) & 0x3; Ok(match len_power_of_two { @@ -109,21 +109,21 @@ impl<R: Read+Seek> StreamingParser<R> { 1 => try!(self.reader.read_u16::<BigEndian>()) as u64, 2 => try!(self.reader.read_u32::<BigEndian>()) as u64, 3 => try!(self.reader.read_u64::<BigEndian>()), - _ => return Err(ParserError::InvalidData) + _ => return Err(ReadError::InvalidData) }) } else { Ok(len as u64) } } - fn read_data(&mut self, len: u64) -> ParserResult<Vec<u8>> { + fn read_data(&mut self, len: u64) -> ReadResult<Vec<u8>> { let mut data = vec![0; len as usize]; let mut total_read = 0usize; while (total_read as u64) < len { let read = try!(self.reader.read(&mut data[total_read..])); if read == 0 { - return Err(ParserError::UnexpectedEof); + return Err(ReadError::UnexpectedEof); } total_read += read; } @@ -131,13 +131,13 @@ impl<R: Read+Seek> StreamingParser<R> { Ok(data) } - fn seek_to_object(&mut self, object_ref: u64) -> ParserResult<u64> { + fn seek_to_object(&mut self, object_ref: u64) -> ReadResult<u64> { let offset = *&self.object_offsets[object_ref as usize]; let pos = try!(self.reader.seek(SeekFrom::Start(offset))); Ok(pos) } - fn read_next(&mut self) -> ParserResult<Option<PlistEvent>> { + fn read_next(&mut self) -> ReadResult<Option<PlistEvent>> { if self.ref_size == 0 { // Initialise here rather than in new try!(self.read_trailer()); @@ -170,19 +170,19 @@ impl<R: Read+Seek> StreamingParser<R> { let size = token & 0x0f; let result = match (ty, size) { - (0x0, 0x00) => return Err(ParserError::UnsupportedType), // null + (0x0, 0x00) => return Err(ReadError::UnsupportedType), // null (0x0, 0x08) => Some(PlistEvent::BooleanValue(false)), (0x0, 0x09) => Some(PlistEvent::BooleanValue(true)), - (0x0, 0x0f) => return Err(ParserError::UnsupportedType), // fill + (0x0, 0x0f) => return Err(ReadError::UnsupportedType), // fill (0x1, 0) => Some(PlistEvent::IntegerValue(try!(self.reader.read_u8()) as i64)), (0x1, 1) => Some(PlistEvent::IntegerValue(try!(self.reader.read_u16::<BigEndian>()) as i64)), (0x1, 2) => Some(PlistEvent::IntegerValue(try!(self.reader.read_u32::<BigEndian>()) as i64)), (0x1, 3) => Some(PlistEvent::IntegerValue(try!(self.reader.read_i64::<BigEndian>()))), - (0x1, 4) => return Err(ParserError::UnsupportedType), // 128 bit int - (0x1, _) => return Err(ParserError::UnsupportedType), // variable length int + (0x1, 4) => return Err(ReadError::UnsupportedType), // 128 bit int + (0x1, _) => return Err(ReadError::UnsupportedType), // variable length int (0x2, 2) => Some(PlistEvent::RealValue(try!(self.reader.read_f32::<BigEndian>()) as f64)), (0x2, 3) => Some(PlistEvent::RealValue(try!(self.reader.read_f64::<BigEndian>()))), - (0x2, _) => return Err(ParserError::UnsupportedType), // odd length float + (0x2, _) => return Err(ReadError::UnsupportedType), // odd length float (0x3, 3) => { // Date // Seconds since 1/1/2001 00:00:00 let timestamp = try!(self.reader.read_f64::<BigEndian>()); @@ -253,17 +253,17 @@ impl<R: Read+Seek> StreamingParser<R> { Some(PlistEvent::StartDictionary(Some(len as u64))) }, - (_, _) => return Err(ParserError::InvalidData) + (_, _) => return Err(ReadError::InvalidData) }; Ok(result) } } -impl<R: Read+Seek> Iterator for StreamingParser<R> { - type Item = ParserResult<PlistEvent>; +impl<R: Read+Seek> Iterator for EventReader<R> { + type Item = ReadResult<PlistEvent>; - fn next(&mut self) -> Option<ParserResult<PlistEvent>> { + fn next(&mut self) -> Option<ReadResult<PlistEvent>> { if self.finished { None } else { @@ -296,7 +296,7 @@ mod tests { use PlistEvent::*; let reader = File::open(&Path::new("./tests/data/binary.plist")).unwrap(); - let streaming_parser = StreamingParser::new(reader); + let streaming_parser = EventReader::new(reader); let events: Vec<PlistEvent> = streaming_parser.map(|e| e.unwrap()).collect(); let comparison = &[ diff --git a/src/builder.rs b/src/builder.rs index fc33e1e..0b17f97 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -1,7 +1,7 @@ use std::collections::BTreeMap; use std::io::{Read, Seek}; -use {ParserError, ParserResult, Plist, PlistEvent, StreamingParser}; +use {ReadError, ReadResult, Plist, PlistEvent, EventReader}; pub type BuilderResult<T> = Result<T, BuilderError>; @@ -9,12 +9,12 @@ pub type BuilderResult<T> = Result<T, BuilderError>; pub enum BuilderError { InvalidEvent, UnsupportedDictionaryKey, - ParserError(ParserError) + ReadError(ReadError) } -impl From<ParserError> for BuilderError { - fn from(err: ParserError) -> BuilderError { - BuilderError::ParserError(err) +impl From<ReadError> for BuilderError { + fn from(err: ReadError) -> BuilderError { + BuilderError::ReadError(err) } } @@ -23,13 +23,13 @@ pub struct Builder<T> { token: Option<PlistEvent>, } -impl<R: Read+Seek> Builder<StreamingParser<R>> { - pub fn new(reader: R) -> Builder<StreamingParser<R>> { - Builder::from_event_stream(StreamingParser::new(reader)) +impl<R: Read+Seek> Builder<EventReader<R>> { + pub fn new(reader: R) -> Builder<EventReader<R>> { + Builder::from_event_stream(EventReader::new(reader)) } } -impl<T:Iterator<Item=ParserResult<PlistEvent>>> Builder<T> { +impl<T:Iterator<Item=ReadResult<PlistEvent>>> Builder<T> { pub fn from_event_stream(stream: T) -> Builder<T> { Builder { stream: stream, @@ -57,7 +57,7 @@ impl<T:Iterator<Item=ParserResult<PlistEvent>>> Builder<T> { fn bump(&mut self) -> BuilderResult<()> { self.token = match self.stream.next() { Some(Ok(token)) => Some(token), - Some(Err(err)) => return Err(BuilderError::ParserError(err)), + Some(Err(err)) => return Err(BuilderError::ReadError(err)), None => None, }; Ok(()) @@ -96,38 +96,38 @@ pub enum PlistEvent { StringValue(String), } -pub type ParserResult<T> = Result<T, ParserError>; +pub type ReadResult<T> = Result<T, ReadError>; #[derive(Debug)] -pub enum ParserError { +pub enum ReadError { InvalidData, UnexpectedEof, UnsupportedType, Io(IoError) } -impl From<IoError> for ParserError { - fn from(io_error: IoError) -> ParserError { - ParserError::Io(io_error) +impl From<IoError> for ReadError { + fn from(io_error: IoError) -> ReadError { + ReadError::Io(io_error) } } -impl From<ChronoParseError> for ParserError { - fn from(_: ChronoParseError) -> ParserError { - ParserError::InvalidData +impl From<ChronoParseError> for ReadError { + fn from(_: ChronoParseError) -> ReadError { + ReadError::InvalidData } } -pub enum StreamingParser<R: Read+Seek> { - Xml(xml::StreamingParser<R>), - Binary(binary::StreamingParser<R>) +pub enum EventReader<R: Read+Seek> { + Xml(xml::EventReader<R>), + Binary(binary::EventReader<R>) } -impl<R: Read+Seek> StreamingParser<R> { - pub fn new(mut reader: R) -> StreamingParser<R> { - match StreamingParser::is_binary(&mut reader) { - Ok(true) => StreamingParser::Binary(binary::StreamingParser::new(reader)), - Ok(false) | Err(_) => StreamingParser::Xml(xml::StreamingParser::new(reader)) +impl<R: Read+Seek> EventReader<R> { + pub fn new(mut reader: R) -> EventReader<R> { + match EventReader::is_binary(&mut reader) { + Ok(true) => EventReader::Binary(binary::EventReader::new(reader)), + Ok(false) | Err(_) => EventReader::Xml(xml::EventReader::new(reader)) } } @@ -145,13 +145,13 @@ impl<R: Read+Seek> StreamingParser<R> { } } -impl<R: Read+Seek> Iterator for StreamingParser<R> { - type Item = ParserResult<PlistEvent>; +impl<R: Read+Seek> Iterator for EventReader<R> { + type Item = ReadResult<PlistEvent>; - fn next(&mut self) -> Option<ParserResult<PlistEvent>> { + fn next(&mut self) -> Option<ReadResult<PlistEvent>> { match *self { - StreamingParser::Xml(ref mut parser) => parser.next(), - StreamingParser::Binary(ref mut parser) => parser.next() + EventReader::Xml(ref mut parser) => parser.next(), + EventReader::Binary(ref mut parser) => parser.next() } } }
\ No newline at end of file diff --git a/src/xml/mod.rs b/src/xml/mod.rs index 71c098e..b82450a 100644 --- a/src/xml/mod.rs +++ b/src/xml/mod.rs @@ -1,5 +1,5 @@ mod reader; mod writer; -pub use self::reader::StreamingParser; -pub use self::writer::Writer;
\ No newline at end of file +pub use self::reader::EventReader; +pub use self::writer::EventWriter;
\ No newline at end of file diff --git a/src/xml/reader.rs b/src/xml/reader.rs index abf671d..b8def8f 100644 --- a/src/xml/reader.rs +++ b/src/xml/reader.rs @@ -2,19 +2,19 @@ use chrono::{DateTime, UTC}; use rustc_serialize::base64::FromBase64; use std::io::Read; use std::str::FromStr; -use xml_rs::reader::{EventReader, ParserConfig, XmlEvent}; +use xml_rs::reader::{EventReader as XmlEventReader, ParserConfig, XmlEvent}; -use super::super::{ParserError, ParserResult, PlistEvent}; +use super::super::{ReadError, ReadResult, PlistEvent}; -pub struct StreamingParser<R: Read> { - xml_reader: EventReader<R>, +pub struct EventReader<R: Read> { + xml_reader: XmlEventReader<R>, queued_event: Option<XmlEvent>, element_stack: Vec<String>, finished: bool } -impl<R: Read> StreamingParser<R> { - pub fn new(reader: R) -> StreamingParser<R> { +impl<R: Read> EventReader<R> { + pub fn new(reader: R) -> EventReader<R> { let config = ParserConfig { trim_whitespace: false, whitespace_to_characters: true, @@ -23,22 +23,22 @@ impl<R: Read> StreamingParser<R> { coalesce_characters: true, }; - StreamingParser { - xml_reader: EventReader::new_with_config(reader, config), + EventReader { + xml_reader: XmlEventReader::new_with_config(reader, config), queued_event: None, element_stack: Vec::new(), finished: false } } - fn read_content<F>(&mut self, f: F) -> ParserResult<PlistEvent> where F:FnOnce(String) -> ParserResult<PlistEvent> { + fn read_content<F>(&mut self, f: F) -> ReadResult<PlistEvent> where F:FnOnce(String) -> ReadResult<PlistEvent> { match self.xml_reader.next() { Ok(XmlEvent::Characters(s)) => f(s), Ok(event @ XmlEvent::EndElement{..}) => { self.queued_event = Some(event); f("".to_owned()) }, - _ => Err(ParserError::InvalidData) + _ => Err(ReadError::InvalidData) } } @@ -50,7 +50,7 @@ impl<R: Read> StreamingParser<R> { } } - fn read_next(&mut self) -> Option<ParserResult<PlistEvent>> { + fn read_next(&mut self) -> Option<ReadResult<PlistEvent>> { loop { match self.next_event() { Ok(XmlEvent::StartElement { name, .. }) => { @@ -68,7 +68,7 @@ impl<R: Read> StreamingParser<R> { let s: String = s.replace(" ", "").replace("\t", ""); match FromBase64::from_base64(&s[..]) { Ok(b) => Ok(PlistEvent::DataValue(b)), - Err(_) => Err(ParserError::InvalidData) + Err(_) => Err(ReadError::InvalidData) } })), "date" => return Some(self.read_content(|s| { @@ -78,25 +78,25 @@ impl<R: Read> StreamingParser<R> { "integer" => return Some(self.read_content(|s| { match FromStr::from_str(&s) { Ok(i) => Ok(PlistEvent::IntegerValue(i)), - Err(_) => Err(ParserError::InvalidData) + Err(_) => Err(ReadError::InvalidData) } })), "real" => return Some(self.read_content(|s| { match FromStr::from_str(&s) { Ok(f) => Ok(PlistEvent::RealValue(f)), - Err(_) => Err(ParserError::InvalidData) + Err(_) => Err(ReadError::InvalidData) } })), "string" => return Some(self.read_content(|s| Ok(PlistEvent::StringValue(s)))), - _ => return Some(Err(ParserError::InvalidData)) + _ => return Some(Err(ReadError::InvalidData)) } }, Ok(XmlEvent::EndElement { name, .. }) => { // Check the corrent element is being closed match self.element_stack.pop() { Some(ref open_name) if &name.local_name == open_name => (), - Some(ref _open_name) => return Some(Err(ParserError::InvalidData)), - None => return Some(Err(ParserError::InvalidData)) + Some(ref _open_name) => return Some(Err(ReadError::InvalidData)), + None => return Some(Err(ReadError::InvalidData)) } match &name.local_name[..] { @@ -109,20 +109,20 @@ impl<R: Read> StreamingParser<R> { Ok(XmlEvent::EndDocument) => { match self.element_stack.is_empty() { true => return None, - false => return Some(Err(ParserError::UnexpectedEof)) + false => return Some(Err(ReadError::UnexpectedEof)) } }, - Err(_) => return Some(Err(ParserError::InvalidData)), + Err(_) => return Some(Err(ReadError::InvalidData)), _ => () } } } } -impl<R: Read> Iterator for StreamingParser<R> { - type Item = ParserResult<PlistEvent>; +impl<R: Read> Iterator for EventReader<R> { + type Item = ReadResult<PlistEvent>; - fn next(&mut self) -> Option<ParserResult<PlistEvent>> { + fn next(&mut self) -> Option<ReadResult<PlistEvent>> { if self.finished { None } else { @@ -155,7 +155,7 @@ mod tests { use PlistEvent::*; let reader = File::open(&Path::new("./tests/data/xml.plist")).unwrap(); - let streaming_parser = StreamingParser::new(reader); + let streaming_parser = EventReader::new(reader); let events: Vec<PlistEvent> = streaming_parser.map(|e| e.unwrap()).collect(); let comparison = &[ @@ -188,7 +188,7 @@ mod tests { #[test] fn bad_data() { let reader = File::open(&Path::new("./tests/data/xml_error.plist")).unwrap(); - let streaming_parser = StreamingParser::new(reader); + let streaming_parser = EventReader::new(reader); let events: Vec<_> = streaming_parser.collect(); assert!(events.last().unwrap().is_err()); diff --git a/src/xml/writer.rs b/src/xml/writer.rs index bd73b1e..ec2d9db 100644 --- a/src/xml/writer.rs +++ b/src/xml/writer.rs @@ -4,7 +4,7 @@ use std::io::Write; use xml_rs::attribute::Attribute; use xml_rs::name::Name; use xml_rs::namespace::Namespace; -use xml_rs::writer::{EventWriter, EmitterConfig}; +use xml_rs::writer::{EventWriter as XmlEventWriter, EmitterConfig}; use xml_rs::writer::events::XmlEvent as WriteXmlEvent; use {PlistEvent}; @@ -20,15 +20,15 @@ enum DictionaryState { ExpectValue } -pub struct Writer<W: Write> { - xml_writer: EventWriter<W>, +pub struct EventWriter<W: Write> { + xml_writer: XmlEventWriter<W>, stack: Vec<Element>, // Not very nice empty_namespace: Namespace } -impl<W: Write> Writer<W> { - pub fn new(writer: W) -> Writer<W> { +impl<W: Write> EventWriter<W> { + pub fn new(writer: W) -> EventWriter<W> { let config = EmitterConfig { line_separator: "\n".into(), indent_string: " ".into(), @@ -41,8 +41,8 @@ impl<W: Write> Writer<W> { autopad_comments: true }; - Writer { - xml_writer: EventWriter::new_with_config(writer, config), + EventWriter { + xml_writer: XmlEventWriter::new_with_config(writer, config), stack: Vec::new(), empty_namespace: Namespace::empty() } @@ -211,7 +211,7 @@ mod tests { let mut cursor = Cursor::new(Vec::new()); { - let mut plist_w = Writer::new(&mut cursor); + let mut plist_w = EventWriter::new(&mut cursor); for item in plist { plist_w.write(item).unwrap(); |
