Skip to main content

easyofd_core/versions/
versions.rs

1//! 版本列表入口。
2
3use super::Version;
4
5/// 对应 Java: org.ofdrw.core.basicStructure.Versions
6///
7/// OFD 文档的版本列表容器,包含文档所有历史版本信息。
8#[derive(Debug, Clone)]
9pub struct Versions {
10    /// 版本列表。
11    pub versions: Vec<Version>,
12}
13
14impl Versions {
15    /// 创建空的版本列表。
16    #[must_use]
17    pub fn new() -> Self {
18        Self {
19            versions: Vec::new(),
20        }
21    }
22
23    /// 添加一个版本。
24    pub fn push(&mut self, version: Version) {
25        self.versions.push(version);
26    }
27
28    /// 序列化为 XML 字符串。
29    #[must_use]
30    pub fn to_xml_string(&self) -> String {
31        let inner: String = self.versions.iter().map(Version::to_xml_string).collect();
32        format!("<Versions>{inner}</Versions>")
33    }
34}
35
36impl Default for Versions {
37    fn default() -> Self {
38        Self::new()
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn test_versions_new() {
48        let v = Versions::new();
49        assert!(v.versions.is_empty());
50        let v2 = Versions::default();
51        assert!(v2.versions.is_empty());
52    }
53
54    #[test]
55    fn test_versions_push_and_xml() {
56        let mut v = Versions::new();
57        v.push(Version::new("1.0"));
58        v.push(Version::new("2.0"));
59        assert_eq!(v.versions.len(), 2);
60        let xml = v.to_xml_string();
61        assert!(xml.contains("<Versions>"));
62        assert!(xml.contains("</Versions>"));
63        assert!(xml.contains("1.0"));
64        assert!(xml.contains("2.0"));
65    }
66}