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
41
42
43
44
45
use super::complex_types::*;
use xmlserde_derives::{XmlDeserialize, XmlSerialize};

#[derive(Debug, XmlSerialize, XmlDeserialize)]
#[xmlserde(with_ns = b"http://schemas.openxmlformats.org/spreadsheetml/2006/main")]
#[xmlserde(root = b"comments")]
pub struct Comments {
    #[xmlserde(name = b"authors", ty = "child")]
    pub authors: CtAuthors,
    #[xmlserde(name = b"commentList", ty = "child")]
    pub comment_list: CtCommentList,
}

#[cfg(test)]
mod tests {
    use super::Comments;
    use crate::xml_deserialize_from_str;
    #[test]
    fn test1() {
        let xml = include_str!("../../examples/comments.xml");
        let r = xml_deserialize_from_str::<Comments>(xml);
        match r {
            Ok(sst) => {
                assert_eq!(sst.comment_list.comments.len(), 10);
                assert_eq!(sst.authors.authors.len(), 1);
                // Used the site and the code below to check the diff manually.
                // Basically pass.
                // https://www.diffchecker.com/diff
                // use crate::xml_serialize_with_decl;
                // use crate::test_utils::*;
                // let expected = to_tree(&in_one_line(xml));
                // let actual = xml_serialize_with_decl(b"comments", sst);
                // let r =  to_tree(&in_one_line(&actual));
                // println!("{:?}", actual);
                // use std::io::Write;
                // let mut file1 = std::fs::File::create("data1.txt").expect("create failed");
                // file1.write_all(expected.as_bytes()).expect("write failed");
                // let mut file2 = std::fs::File::create("data2.txt").expect("create failed");
                // file2.write_all(r.as_bytes()).expect("write failed");
                // assert_eq!(expected, r);
            }
            Err(e) => panic!("{:?}", e),
        }
    }
}