umya_spreadsheet/structs/
header_footer.rs

1// headerFooter
2use crate::reader::driver::*;
3use crate::structs::OddFooter;
4use crate::structs::OddHeader;
5use crate::writer::driver::*;
6use quick_xml::events::{BytesStart, Event};
7use quick_xml::Reader;
8use quick_xml::Writer;
9use std::io::Cursor;
10
11#[derive(Clone, Default, Debug)]
12pub struct HeaderFooter {
13    odd_header: OddHeader,
14    odd_footer: OddFooter,
15}
16
17impl HeaderFooter {
18    #[inline]
19    pub fn get_odd_header(&self) -> &OddHeader {
20        &self.odd_header
21    }
22
23    #[inline]
24    pub fn get_odd_header_mut(&mut self) -> &mut OddHeader {
25        &mut self.odd_header
26    }
27
28    #[inline]
29    pub fn set_odd_header(&mut self, value: OddHeader) -> &mut Self {
30        self.odd_header = value;
31        self
32    }
33
34    #[inline]
35    pub fn get_odd_footer(&self) -> &OddFooter {
36        &self.odd_footer
37    }
38
39    #[inline]
40    pub fn get_odd_footer_mut(&mut self) -> &mut OddFooter {
41        &mut self.odd_footer
42    }
43
44    #[inline]
45    pub fn set_odd_footer(&mut self, value: OddFooter) -> &mut Self {
46        self.odd_footer = value;
47        self
48    }
49
50    #[inline]
51    pub(crate) fn has_param(&self) -> bool {
52        self.odd_header.has_param() || self.odd_footer.has_param()
53    }
54
55    pub(crate) fn set_attributes<R: std::io::BufRead>(
56        &mut self,
57        reader: &mut Reader<R>,
58        _e: &BytesStart,
59    ) {
60        xml_read_loop!(
61            reader,
62            Event::Start(ref e) => {
63                match e.name().into_inner() {
64                b"oddHeader" => {
65                    self.odd_header.set_attributes(reader, e);
66                }
67                b"oddFooter" => {
68                    self.odd_footer.set_attributes(reader, e);
69                }
70                _ => (),
71                }
72            },
73            Event::End(ref e) => {
74                if e.name().into_inner() == b"headerFooter" {
75                    return
76                }
77            },
78            Event::Eof => panic!("Error: Could not find {} end element", "headerFooter")
79        );
80    }
81
82    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
83        if self.has_param() {
84            // headerFooter
85            write_start_tag(writer, "headerFooter", vec![], false);
86
87            // oddHeader
88            self.get_odd_header().write_to(writer);
89
90            // oddFooter
91            self.get_odd_footer().write_to(writer);
92
93            write_end_tag(writer, "headerFooter");
94        }
95    }
96}