docx_rs/documents/elements/
positional_tab.rs

1use 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}