docx_rs/documents/elements/
comment_range_end.rs1use serde::Serialize;
2use std::io::Write;
3
4use crate::documents::BuildXML;
5use crate::xml_builder::*;
6
7#[derive(Serialize, Debug, Clone, PartialEq)]
8pub struct CommentRangeEnd {
9 id: usize,
10}
11
12impl CommentRangeEnd {
13 pub fn new(id: usize) -> CommentRangeEnd {
14 CommentRangeEnd { id }
15 }
16}
17
18impl BuildXML for CommentRangeEnd {
19 fn build_to<W: Write>(
20 &self,
21 stream: xml::writer::EventWriter<W>,
22 ) -> xml::writer::Result<xml::writer::EventWriter<W>> {
23 XMLBuilder::from(stream)
24 .open_run()?
25 .open_run_property()?
26 .close()?
27 .close()?
28 .comment_range_end(&format!("{}", self.id))?
29 .open_run()?
30 .comment_reference(&format!("{}", self.id))?
31 .close()?
32 .into_inner()
33 }
34}
35
36#[cfg(test)]
37mod tests {
38
39 use super::*;
40 #[cfg(test)]
41 use pretty_assertions::assert_eq;
42 use std::str;
43
44 #[test]
45 fn test_comment_range_end() {
46 let c = CommentRangeEnd::new(1);
47 let b = c.build();
48 assert_eq!(
49 str::from_utf8(&b).unwrap(),
50 r#"<w:r><w:rPr /></w:r><w:commentRangeEnd w:id="1" /><w:r><w:commentReference w:id="1" /></w:r>"#
51 );
52 }
53}