#[derive(Debug, Clone)]
pub struct OfdDir {
pub ofd_file_name: String,
pub encryptions_file_name: String,
pub ofd_entries_file_name: String,
pub doc_dirs: Vec<String>,
pub max_doc_index: u32,
}
impl OfdDir {
pub const OFD_FILE_NAME: &'static str = "OFD.xml";
pub const ENCRYPTIONS_FILE_NAME: &'static str = "Encryptions.xml";
pub const OFD_ENTRIES_FILE_NAME: &'static str = "OFDEntries.xml";
#[must_use]
pub fn new() -> Self {
Self {
ofd_file_name: Self::OFD_FILE_NAME.to_string(),
encryptions_file_name: Self::ENCRYPTIONS_FILE_NAME.to_string(),
ofd_entries_file_name: Self::OFD_ENTRIES_FILE_NAME.to_string(),
doc_dirs: Vec::new(),
max_doc_index: 0,
}
}
pub fn new_doc(&mut self) -> String {
let name = format!("Doc_{}", self.max_doc_index);
self.max_doc_index += 1;
self.doc_dirs.push(name.clone());
name
}
#[must_use]
pub fn doc_dir_name(index: u32) -> String {
format!("Doc_{index}")
}
pub fn doc_count(&self) -> usize {
self.doc_dirs.len()
}
}
impl Default for OfdDir {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_ofd_dir_new() {
let dir = OfdDir::new();
assert_eq!(dir.ofd_file_name, "OFD.xml");
assert_eq!(dir.encryptions_file_name, "Encryptions.xml");
assert_eq!(dir.ofd_entries_file_name, "OFDEntries.xml");
assert!(dir.doc_dirs.is_empty());
assert_eq!(dir.max_doc_index, 0);
}
#[test]
fn test_ofd_dir_new_doc() {
let mut dir = OfdDir::new();
let doc0 = dir.new_doc();
assert_eq!(doc0, "Doc_0");
let doc1 = dir.new_doc();
assert_eq!(doc1, "Doc_1");
assert_eq!(dir.doc_count(), 2);
assert_eq!(dir.max_doc_index, 2);
}
#[test]
fn test_ofd_dir_doc_dir_name() {
assert_eq!(OfdDir::doc_dir_name(0), "Doc_0");
assert_eq!(OfdDir::doc_dir_name(5), "Doc_5");
}
#[test]
fn test_ofd_dir_default() {
let dir = OfdDir::default();
assert_eq!(dir.ofd_file_name, "OFD.xml");
}
}