1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use serde::{Deserialize, Serialize};

use crate::documents::BuildXML;
use crate::types::*;
use crate::xml_builder::*;

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Default)]
pub struct Tab {
    pub val: Option<TabValueType>,
    pub leader: Option<TabLeaderType>,
    pub pos: Option<usize>,
}

impl Tab {
    pub fn new() -> Self {
        Default::default()
    }

    pub fn val(mut self, v: TabValueType) -> Self {
        self.val = Some(v);
        self
    }

    pub fn leader(mut self, v: TabLeaderType) -> Self {
        self.leader = Some(v);
        self
    }

    pub fn pos(mut self, v: usize) -> Self {
        self.pos = Some(v);
        self
    }
}

impl BuildXML for Tab {
    fn build(&self) -> Vec<u8> {
        let b = XMLBuilder::new();
        b.tab(self.val, self.leader, self.pos).build()
    }
}