docx_rust/formatting/
borders.rs

1use hard_xml::{XmlRead, XmlWrite};
2
3use crate::{
4    __setter, __xml_test_suites,
5    formatting::{BarBorder, BetweenBorder, BottomBorder, LeftBorder, RightBorder, TopBorder},
6};
7
8/// Borders
9#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
10#[cfg_attr(test, derive(PartialEq))]
11#[xml(tag = "w:pBdr")]
12pub struct Borders<'a> {
13    #[xml(child = "w:top")]
14    pub top: Option<TopBorder<'a>>,
15    #[xml(child = "w:left")]
16    pub left: Option<LeftBorder<'a>>,
17    #[xml(child = "w:bottom")]
18    pub bottom: Option<BottomBorder<'a>>,
19    #[xml(child = "w:right")]
20    pub right: Option<RightBorder<'a>>,
21    #[xml(child = "w:between")]
22    pub between: Option<BetweenBorder<'a>>,
23    #[xml(child = "w:bar")]
24    pub bar: Option<BarBorder<'a>>,
25}
26
27impl<'a> Borders<'a> {
28    __setter!(top: Option<TopBorder<'a>>);
29    __setter!(bottom: Option<BottomBorder<'a>>);
30    __setter!(left: Option<LeftBorder<'a>>);
31    __setter!(right: Option<RightBorder<'a>>);
32    __setter!(between: Option<BetweenBorder<'a>>);
33}
34
35__xml_test_suites!(
36    Borders,
37    Borders::default(),
38    r#"<w:pBdr/>"#,
39    Borders::default().top(TopBorder::default()),
40    r#"<w:pBdr><w:top w:val="none"/></w:pBdr>"#,
41    Borders::default().bottom(BottomBorder::default()),
42    r#"<w:pBdr><w:bottom w:val="none"/></w:pBdr>"#,
43    Borders::default().left(LeftBorder::default()),
44    r#"<w:pBdr><w:left w:val="none"/></w:pBdr>"#,
45    Borders::default().right(RightBorder::default()),
46    r#"<w:pBdr><w:right w:val="none"/></w:pBdr>"#,
47    Borders::default().between(BetweenBorder::default()),
48    r#"<w:pBdr><w:between w:val="none"/></w:pBdr>"#,
49);