use super::File;
#[derive(Debug, Clone)]
pub struct FileList {
pub files: Vec<File>,
}
impl FileList {
#[must_use]
pub fn new() -> Self {
Self { files: Vec::new() }
}
#[must_use]
pub fn with(mut self, file: File) -> Self {
self.files.push(file);
self
}
pub fn push(&mut self, file: File) {
self.files.push(file);
}
#[must_use]
pub fn to_xml_string(&self) -> String {
let inner: String = self.files.iter().map(File::to_xml_string).collect();
format!("<FileList>{inner}</FileList>")
}
}
impl Default for FileList {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_file_list_new() {
let fl = FileList::new();
assert!(fl.files.is_empty());
let fl2 = FileList::default();
assert!(fl2.files.is_empty());
}
#[test]
fn test_file_list_with_and_xml() {
let fl = FileList::new()
.with(File::new("a.xml", 100))
.with(File::new("b.xml", 200));
assert_eq!(fl.files.len(), 2);
let xml = fl.to_xml_string();
assert!(xml.contains("<FileList>"));
assert!(xml.contains("a.xml"));
assert!(xml.contains("b.xml"));
}
}