aboutsummaryrefslogtreecommitdiff
path: root/src/xmlutil.rs
diff options
context:
space:
mode:
authorNick Shipp <nick@shipp.ninja>2017-05-27 23:27:57 -0400
committerNick Shipp <nick@shipp.ninja>2017-05-27 23:27:57 -0400
commit30bd9159921998288c623b0e7e357830c5d62bfb (patch)
treeb52e4cd6ed108efd5e58e73069375fcaee069ce2 /src/xmlutil.rs
WIP: Wrote partial lifter from mediawiki dumps
Diffstat (limited to 'src/xmlutil.rs')
-rw-r--r--src/xmlutil.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/xmlutil.rs b/src/xmlutil.rs
new file mode 100644
index 0000000..a0cebaf
--- /dev/null
+++ b/src/xmlutil.rs
@@ -0,0 +1,30 @@
+use std::io::BufRead;
+
+use quick_xml::reader::Reader;
+use quick_xml::events::Event;
+use errors::{ErrorKind, Result};
+
+pub fn element_text<B: BufRead>(reader: &mut Reader<B>) -> Result<String> {
+ let content: Result<String>;
+ let mut buf = Vec::new();
+
+ if let Ok(Event::Text(e)) = reader.read_event(&mut buf) {
+ content = match e.unescape_and_decode(&reader) {
+ Ok(s) => Ok(s),
+ Err(e) => Err(e.into()),
+ }
+ } else {
+ return Err(ErrorKind::ElementText(reader.buffer_position()).into())
+ }
+
+ match reader.read_event(&mut buf) {
+ Ok(Event::End(_)) => (),
+ _ => return Err(ErrorKind::ClosingTag(reader.buffer_position()).into())
+ }
+
+ content
+}
+
+pub trait FromXml: Sized {
+ fn from_xml<B: BufRead>(reader: &mut Reader<B>) -> Result<Self>;
+}