Skip to main content

easyofd_core/versions/
version.rs

1//! 单个版本描述。
2
3use super::DocVersion;
4
5/// 对应 Java: org.ofdrw.core.basicStructure.Version
6///
7/// 描述 OFD 文档的一个版本,包含版本号和该版本的文档内容。
8#[derive(Debug, Clone)]
9pub struct Version {
10    /// 版本号(如 "1.0"、"2.0")。
11    pub version: String,
12    /// 该版本的文档版本列表。
13    pub doc_versions: Vec<DocVersion>,
14}
15
16impl Version {
17    /// 创建指定版本号的版本。
18    #[must_use]
19    pub fn new(version: impl Into<String>) -> Self {
20        Self {
21            version: version.into(),
22            doc_versions: Vec::new(),
23        }
24    }
25
26    /// 添加文档版本。
27    pub fn push_doc_version(&mut self, doc_version: DocVersion) {
28        self.doc_versions.push(doc_version);
29    }
30
31    /// 序列化为 XML 字符串。
32    #[must_use]
33    pub fn to_xml_string(&self) -> String {
34        let inner: String = self
35            .doc_versions
36            .iter()
37            .map(DocVersion::to_xml_string)
38            .collect();
39        format!("<Version Version=\"{}\">{inner}</Version>", self.version)
40    }
41}
42
43#[cfg(test)]
44mod tests {
45    use super::*;
46
47    #[test]
48    fn test_version_new() {
49        let v = Version::new("1.0");
50        assert_eq!(v.version, "1.0");
51        assert!(v.doc_versions.is_empty());
52    }
53
54    #[test]
55    fn test_version_xml() {
56        let mut v = Version::new("2.0");
57        v.push_doc_version(DocVersion::new("doc1"));
58        let xml = v.to_xml_string();
59        assert!(xml.contains("Version=\"2.0\""));
60        assert!(xml.contains("doc1"));
61    }
62}