1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#![allow(unused_must_use)]
use derive_more::From;
use std::borrow::Cow;
use strong_xml::{XmlRead, XmlWrite};
use crate::{
__setter, __xml_test_suites,
__string_enum,
};
#[derive(Debug, From, XmlRead, XmlWrite, Clone)]
#[cfg_attr(test, derive(PartialEq))]
pub enum HeaderFooterReference<'a> {
#[xml(tag = "w:headerReference")]
Header(HeaderReference<'a>),
#[xml(tag = "w:footerReference")]
Footer(FooterReference<'a>),
}
#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
#[cfg_attr(test, derive(PartialEq))]
#[xml(tag = "w:headerReference")]
pub struct HeaderReference<'a> {
#[xml(attr = "w:type")]
pub ty: Option<HeaderFooterReferenceType>,
#[xml(attr = "r:id")]
pub id: Option<Cow<'a, str>>,
}
impl<'a> HeaderReference<'a> {
__setter!(ty: Option<HeaderFooterReferenceType>);
__setter!(id: Option<Cow<'a, str>>);
}
#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
#[cfg_attr(test, derive(PartialEq))]
#[xml(tag = "w:footerReference")]
pub struct FooterReference<'a> {
#[xml(attr = "w:type")]
pub ty: Option<HeaderFooterReferenceType>,
#[xml(attr = "r:id")]
pub id: Option<Cow<'a, str>>,
}
impl<'a> FooterReference<'a> {
__setter!(ty: Option<HeaderFooterReferenceType>);
__setter!(id: Option<Cow<'a, str>>);
}
#[derive(Debug, Clone)]
#[cfg_attr(test, derive(PartialEq))]
pub enum HeaderFooterReferenceType {
Default,
Even,
First,
}
__string_enum! {
HeaderFooterReferenceType {
Default = "default",
Even = "even",
First = "first",
}
}
__xml_test_suites!(
HeaderReference,
HeaderReference::default(),
r#"<w:headerReference/>"#,
HeaderReference::default().ty(HeaderFooterReferenceType::Default),
r#"<w:headerReference w:type="default"/>"#,
);