easyofd_core/extensions/
extensions.rs1use super::CtExtension;
4
5#[derive(Debug, Clone)]
9pub struct Extensions {
10 pub extensions: Vec<CtExtension>,
12}
13
14impl Extensions {
15 #[must_use]
17 pub fn new() -> Self {
18 Self {
19 extensions: Vec::new(),
20 }
21 }
22
23 pub fn push(&mut self, ext: CtExtension) {
25 self.extensions.push(ext);
26 }
27
28 #[must_use]
30 pub fn to_xml_string(&self) -> String {
31 let inner: String = self
32 .extensions
33 .iter()
34 .map(CtExtension::to_xml_string)
35 .collect();
36 format!("<Extensions>{inner}</Extensions>")
37 }
38}
39
40impl Default for Extensions {
41 fn default() -> Self {
42 Self::new()
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use super::*;
49 use crate::extensions::Property;
50
51 #[test]
52 fn test_extensions_new() {
53 let e = Extensions::new();
54 assert!(e.extensions.is_empty());
55 let e2 = Extensions::default();
56 assert!(e2.extensions.is_empty());
57 }
58
59 #[test]
60 fn test_extensions_push_and_xml() {
61 let mut e = Extensions::new();
62 e.push(CtExtension::new("ext1", "1.0").with_property(Property::new("key", "val")));
63 assert_eq!(e.extensions.len(), 1);
64 let xml = e.to_xml_string();
65 assert!(xml.contains("<Extensions>"));
66 assert!(xml.contains("</Extensions>"));
67 assert!(xml.contains("ext1"));
68 }
69}