docx_reader/documents/elements/
insert.rs1use serde::ser::{SerializeStruct, Serializer};
2use serde::Serialize;
3
4use super::*;
5
6use crate::documents::Run;
7
8#[derive(Debug, Clone, PartialEq)]
9pub enum InsertChild {
10 Run(Box<Run>),
11 Delete(Delete),
12}
13
14impl Serialize for InsertChild {
15 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
16 where
17 S: Serializer,
18 {
19 match *self {
20 InsertChild::Run(ref r) => {
21 let mut t = serializer.serialize_struct("Run", 2)?;
22 t.serialize_field("type", "run")?;
23 t.serialize_field("data", r)?;
24 t.end()
25 }
26 InsertChild::Delete(ref r) => {
27 let mut t = serializer.serialize_struct("Delete", 2)?;
28 t.serialize_field("type", "delete")?;
29 t.serialize_field("data", r)?;
30 t.end()
31 }
32 }
33 }
34}
35
36#[derive(Serialize, Debug, Clone, PartialEq)]
37pub struct Insert {
38 pub children: Vec<InsertChild>,
39 pub author: String,
40 pub date: String,
41}
42
43impl Default for Insert {
44 fn default() -> Insert {
45 Insert {
46 author: "unnamed".to_owned(),
47 date: "1970-01-01T00:00:00Z".to_owned(),
48 children: vec![],
49 }
50 }
51}
52
53impl Insert {
54 pub fn new(run: Run) -> Insert {
55 Self {
56 children: vec![InsertChild::Run(Box::new(run))],
57 ..Default::default()
58 }
59 }
60
61 pub fn new_with_empty() -> Insert {
62 Self {
63 ..Default::default()
64 }
65 }
66
67 pub fn new_with_del(del: Delete) -> Insert {
68 Self {
69 children: vec![InsertChild::Delete(del)],
70 ..Default::default()
71 }
72 }
73
74 pub fn add_run(mut self, run: Run) -> Insert {
75 self.children.push(InsertChild::Run(Box::new(run)));
76 self
77 }
78
79 pub fn add_delete(mut self, del: Delete) -> Insert {
80 self.children.push(InsertChild::Delete(del));
81 self
82 }
83
84 pub fn add_child(mut self, c: InsertChild) -> Insert {
85 self.children.push(c);
86 self
87 }
88
89 pub fn author(mut self, author: impl Into<String>) -> Insert {
90 self.author = author.into();
91 self
92 }
93
94 pub fn date(mut self, date: impl Into<String>) -> Insert {
95 self.date = date.into();
96 self
97 }
98}