use std::io::BufRead; use quick_xml::reader::Reader; use quick_xml::events::Event; use errors::{ErrorKind, Result}; pub fn element_text(reader: &mut Reader) -> Result { let content: Result; 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(reader: &mut Reader) -> Result; }