docx_rs/reader/
font_scheme.rs

1#![allow(clippy::single_match)]
2
3use std::io::Read;
4use std::str::FromStr;
5
6use xml::attribute::OwnedAttribute;
7use xml::reader::{EventReader, XmlEvent};
8
9use crate::reader::*;
10
11impl ElementReader for FontScheme {
12    fn read<R: Read>(
13        r: &mut EventReader<R>,
14        _attrs: &[OwnedAttribute],
15    ) -> Result<Self, ReaderError> {
16        let mut fs = FontScheme::new();
17        loop {
18            let e = r.next();
19            match e {
20                Ok(XmlEvent::StartElement {
21                    attributes, name, ..
22                }) => {
23                    match name.prefix.as_deref() {
24                        Some("a") => {
25                            let e = AXMLElement::from_str(&name.local_name).unwrap();
26                            match e {
27                                AXMLElement::MajorFont => {
28                                    if let Ok(f) = FontGroup::read(r, &attributes) {
29                                        fs.major_font = f;
30                                    }
31                                }
32                                AXMLElement::MinorFont => {
33                                    if let Ok(f) = FontGroup::read(r, &attributes) {
34                                        fs.minor_font = f;
35                                    }
36                                }
37                                _ => {}
38                            }
39                        }
40                        _ => {}
41                    };
42                }
43                Ok(XmlEvent::EndElement { name, .. }) => {
44                    let e = AXMLElement::from_str(&name.local_name).unwrap();
45                    match e {
46                        AXMLElement::FontScheme => {
47                            return Ok(fs);
48                        }
49                        _ => {}
50                    }
51                }
52                Err(_) => return Err(ReaderError::XMLReadError),
53                _ => {}
54            }
55        }
56    }
57}