use super::Version;
#[derive(Debug, Clone)]
pub struct Versions {
pub versions: Vec<Version>,
}
impl Versions {
#[must_use]
pub fn new() -> Self {
Self {
versions: Vec::new(),
}
}
pub fn push(&mut self, version: Version) {
self.versions.push(version);
}
#[must_use]
pub fn to_xml_string(&self) -> String {
let inner: String = self.versions.iter().map(Version::to_xml_string).collect();
format!("<Versions>{inner}</Versions>")
}
}
impl Default for Versions {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_versions_new() {
let v = Versions::new();
assert!(v.versions.is_empty());
let v2 = Versions::default();
assert!(v2.versions.is_empty());
}
#[test]
fn test_versions_push_and_xml() {
let mut v = Versions::new();
v.push(Version::new("1.0"));
v.push(Version::new("2.0"));
assert_eq!(v.versions.len(), 2);
let xml = v.to_xml_string();
assert!(xml.contains("<Versions>"));
assert!(xml.contains("</Versions>"));
assert!(xml.contains("1.0"));
assert!(xml.contains("2.0"));
}
}