use crate::documents::BuildXML;
use crate::types::PageMargin;
use crate::xml_builder::*;
// These values were based on microsoft office word2019 windows edition.
//
impl Default for PageMargin {
fn default() -> PageMargin {
PageMargin {
top: 1985,
left: 1701,
bottom: 1701,
right: 1701,
header: 851,
footer: 992,
gutter: 0,
}
}
}
impl PageMargin {
pub fn new() -> PageMargin {
Default::default()
}
pub fn top(self, v: i32) -> PageMargin {
PageMargin { top: v, ..self }
}
pub fn left(self, v: i32) -> PageMargin {
PageMargin { left: v, ..self }
}
pub fn bottom(self, v: i32) -> PageMargin {
PageMargin { bottom: v, ..self }
}
pub fn right(self, v: i32) -> PageMargin {
PageMargin { right: v, ..self }
}
pub fn header(self, v: i32) -> PageMargin {
PageMargin { header: v, ..self }
}
pub fn footer(self, v: i32) -> PageMargin {
PageMargin { footer: v, ..self }
}
pub fn gutter(self, v: i32) -> PageMargin {
PageMargin { gutter: v, ..self }
}
}
impl BuildXML for PageMargin {
fn build(&self) -> Vec {
XMLBuilder::new()
.page_margin(
&format!("{}", self.top),
&format!("{}", self.right),
&format!("{}", self.bottom),
&format!("{}", self.left),
&format!("{}", self.header),
&format!("{}", self.footer),
&format!("{}", self.gutter),
)
.build()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[cfg(test)]
use pretty_assertions::assert_eq;
use std::str;
#[test]
fn test_page_margin_default() {
let b = PageMargin::new().build();
assert_eq!(
str::from_utf8(&b).unwrap(),
r#""#
);
}
}