1use std::io::Read;
2use std::str::FromStr;
3
4use crate::reader::*;
5
6impl FromXML for Theme {
7 fn from_xml<R: Read>(reader: R) -> Result<Self, ReaderError> {
8 let mut parser = EventReader::new(reader);
9 let mut theme = Self::default();
10 loop {
11 let e = parser.next();
12 match e {
13 Ok(XmlEvent::StartElement {
14 attributes, name, ..
15 }) => {
16 let e = AXMLElement::from_str(&name.local_name).unwrap();
17 #[allow(clippy::single_match)]
18 match e {
19 AXMLElement::FontScheme => {
20 if let Ok(f) = FontScheme::read(&mut parser, &attributes) {
21 theme.font_schema = f;
22 }
23 continue;
24 }
25 _ => {}
26 }
27 }
28 Ok(XmlEvent::EndDocument) => break,
29 Err(_) => return Err(ReaderError::XMLReadError),
30 _ => {}
31 }
32 }
33 Ok(theme)
34 }
35}