docx_rust/document/
header_footer_reference.rs

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