docx_rs/documents/elements/
positional_tab.rs1use serde::{Deserialize, Serialize};
2use std::io::Write;
3
4use crate::documents::BuildXML;
5use crate::types::*;
6use crate::xml_builder::*;
7
8#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
9#[cfg_attr(feature = "wasm", derive(ts_rs::TS))]
10#[cfg_attr(feature = "wasm", ts(export))]
11#[serde(rename_all = "camelCase")]
12pub struct PositionalTab {
13 pub alignment: PositionalTabAlignmentType,
14 pub relative_to: PositionalTabRelativeTo,
15 pub leader: TabLeaderType,
16}
17
18impl Default for PositionalTab {
19 fn default() -> Self {
20 Self {
21 alignment: PositionalTabAlignmentType::Left,
22 relative_to: PositionalTabRelativeTo::Margin,
23 leader: TabLeaderType::None,
24 }
25 }
26}
27
28impl PositionalTab {
29 pub fn new(
30 alignment: PositionalTabAlignmentType,
31 relative_to: PositionalTabRelativeTo,
32 leader: TabLeaderType,
33 ) -> Self {
34 Self {
35 alignment,
36 relative_to,
37 leader,
38 }
39 }
40
41 pub fn relative_to(mut self, relative_to: PositionalTabRelativeTo) -> Self {
42 self.relative_to = relative_to;
43 self
44 }
45
46 pub fn leader(mut self, leader: TabLeaderType) -> Self {
47 self.leader = leader;
48 self
49 }
50
51 pub fn alignment(mut self, alignment: PositionalTabAlignmentType) -> Self {
52 self.alignment = alignment;
53 self
54 }
55}
56
57impl BuildXML for PositionalTab {
58 fn build_to<W: Write>(
59 &self,
60 stream: xml::writer::EventWriter<W>,
61 ) -> xml::writer::Result<xml::writer::EventWriter<W>> {
62 XMLBuilder::from(stream)
63 .ptab(self.alignment, self.relative_to, self.leader)?
64 .into_inner()
65 }
66}