Skip to main content

easyofd_core/versions/
file.rs

1//! 单个文件信息。
2
3/// 对应 Java: org.ofdrw.core.basicStructure.File
4///
5/// 描述 OFD 包中的一个文件,包含文件名和大小。
6#[derive(Debug, Clone)]
7pub struct File {
8    /// 文件名(如 "OFD.xml"、"Doc_0/Content.xml")。
9    pub name: String,
10    /// 文件大小(字节)。
11    pub size: u64,
12}
13
14impl File {
15    /// 创建新的文件信息。
16    #[must_use]
17    pub fn new(name: impl Into<String>, size: u64) -> Self {
18        Self {
19            name: name.into(),
20            size,
21        }
22    }
23
24    /// 序列化为 XML 字符串。
25    #[must_use]
26    pub fn to_xml_string(&self) -> String {
27        format!("<File Name=\"{}\" Size=\"{}\"/>", self.name, self.size)
28    }
29}
30
31#[cfg(test)]
32mod tests {
33    use super::*;
34
35    #[test]
36    fn test_file_new() {
37        let f = File::new("OFD.xml", 1024);
38        assert_eq!(f.name, "OFD.xml");
39        assert_eq!(f.size, 1024);
40    }
41
42    #[test]
43    fn test_file_xml() {
44        let f = File::new("Doc_0/Content.xml", 4096);
45        let xml = f.to_xml_string();
46        assert!(xml.contains("Name=\"Doc_0/Content.xml\""));
47        assert!(xml.contains("Size=\"4096\""));
48        assert!(xml.contains("/>"));
49    }
50}