docx_rs/documents/elements/
comment_range_end.rs

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