docx_reader/documents/elements/
insert.rs

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