use error::Error;
use quick_xml::{Element, Event, XmlWriter};
use quick_xml::error::Error as XmlError;
use toxml::ToXml;
#[derive(Debug, Default, Clone, PartialEq)]
pub struct ITunesCategory {
text: String,
subcategory: Option<Box<ITunesCategory>>,
}
impl ITunesCategory {
pub fn text(&self) -> &str {
self.text.as_str()
}
pub fn subcategory(&self) -> Option<&Box<ITunesCategory>> {
self.subcategory.as_ref()
}
}
impl ToXml for ITunesCategory {
fn to_xml<W: ::std::io::Write>(&self, writer: &mut XmlWriter<W>) -> Result<(), XmlError> {
let element = Element::new(b"itunes:category");
writer
.write(Event::Start({
let mut element = element.clone();
element.extend_attributes(::std::iter::once((b"text",
&self.text)));
element
}))?;
if let Some(subcategory) = self.subcategory.as_ref() {
subcategory.to_xml(writer)?;
}
writer.write(Event::End(element))
}
}
#[derive(Debug, Clone, Default)]
pub struct ITunesCategoryBuilder {
text: String,
subcategory: Option<Box<ITunesCategory>>,
}
impl ITunesCategoryBuilder {
pub fn new() -> ITunesCategoryBuilder {
ITunesCategoryBuilder::default()
}
pub fn text(mut self, text: &str) -> ITunesCategoryBuilder {
self.text = text.to_string();
self
}
pub fn subcategory(mut self,
subcategory: Option<Box<ITunesCategory>>)
-> ITunesCategoryBuilder {
self.subcategory = subcategory;
self
}
pub fn finalize(self) -> Result<ITunesCategory, Error> {
Ok(ITunesCategory {
text: self.text,
subcategory: self.subcategory,
})
}
}