easyofd_core/signatures/
reference.rs1use std::fmt::Write;
8
9#[derive(Debug, Clone)]
13pub struct Reference {
14 pub file_ref: String,
16 pub check_value: String,
18}
19
20impl Reference {
21 #[must_use]
23 pub fn new(file_ref: impl Into<String>, check_value: impl Into<String>) -> Self {
24 Self {
25 file_ref: file_ref.into(),
26 check_value: check_value.into(),
27 }
28 }
29
30 #[must_use]
32 pub fn to_xml_string(&self) -> String {
33 let mut xml = String::from(r#"<ofd:Reference FileRef=""#);
34 let _ = write!(xml, "{}", self.file_ref);
35 xml.push_str(r#"">"#);
36 let _ = write!(xml, "<ofd:CheckValue>{}</ofd:CheckValue>", self.check_value);
37 xml.push_str("</ofd:Reference>");
38 xml
39 }
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45
46 #[test]
47 fn test_reference_new() {
48 let r = Reference::new("/Doc_0/Document.xml", "abc123base64");
49 assert_eq!(r.file_ref, "/Doc_0/Document.xml");
50 assert_eq!(r.check_value, "abc123base64");
51 }
52
53 #[test]
54 fn test_reference_xml() {
55 let r = Reference::new("/Doc_0/Pages/Page_0/Content.xml", "dGVzdA==");
56 let xml = r.to_xml_string();
57 assert!(xml.contains(r#"FileRef="/Doc_0/Pages/Page_0/Content.xml""#));
58 assert!(xml.contains("<ofd:CheckValue>dGVzdA==</ofd:CheckValue>"));
59 assert!(xml.contains("</ofd:Reference>"));
60 }
61
62 #[test]
63 fn test_reference_clone() {
64 let r = Reference::new("/Res/font.ttf", "hash123");
65 let r2 = r.clone();
66 assert_eq!(r2.file_ref, "/Res/font.ttf");
67 assert_eq!(r2.check_value, "hash123");
68 }
69}