use quick_xml::{XmlReader, Event, Element};
use fromxml::FromXml;
use error::Error;
#[derive(Debug, Default, Clone, PartialEq)]
pub struct TextInput {
pub title: String,
pub description: String,
pub name: String,
pub link: String,
}
impl FromXml for TextInput {
fn from_xml<R: ::std::io::BufRead>(mut reader: XmlReader<R>,
_: Element)
-> Result<(Self, XmlReader<R>), Error> {
let mut title = None;
let mut description = None;
let mut name = None;
let mut link = None;
while let Some(e) = reader.next() {
match e {
Ok(Event::Start(element)) => {
match element.name() {
b"title" => title = element_text!(reader),
b"description" => description = element_text!(reader),
b"name" => name = element_text!(reader),
b"link" => link = element_text!(reader),
_ => skip_element!(reader),
}
}
Ok(Event::End(_)) => {
let title = title.unwrap_or_default();
let description = description.unwrap_or_default();
let name = name.unwrap_or_default();
let link = link.unwrap_or_default();
return Ok((TextInput {
title: title,
description: description,
name: name,
link: link,
}, reader))
}
Err(err) => return Err(err.into()),
_ => {}
}
}
Err(Error::EOF)
}
}