umya_spreadsheet/structs/
header_footer.rs1use 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 write_start_tag(writer, "headerFooter", vec![], false);
86
87 self.get_odd_header().write_to(writer);
89
90 self.get_odd_footer().write_to(writer);
92
93 write_end_tag(writer, "headerFooter");
94 }
95 }
96}