#[derive(Debug, Clone)]
pub struct DocDir {
pub index: u32,
pub document_file_name: String,
pub public_res_file_name: String,
pub document_res_file_name: String,
pub signs_dir_name: String,
pub pages_dir_name: String,
pub res_dir_name: String,
pub annots_dir_name: String,
pub annotations_file_name: String,
pub attachments_file_name: String,
}
impl DocDir {
pub const DOC_CONTAINER_PREFIX: &'static str = "Doc_";
pub const DOCUMENT_FILE_NAME: &'static str = "Document.xml";
pub const PUBLIC_RES_FILE_NAME: &'static str = "PublicRes.xml";
pub const DOCUMENT_RES_FILE_NAME: &'static str = "DocumentRes.xml";
pub const SIGNS_DIR_NAME: &'static str = "Signs";
pub const SIGN_CONTAINER_PREFIX: &'static str = "Sign_";
pub const TAGS_DIR_NAME: &'static str = "Tags";
pub const TEMPS_DIR_NAME: &'static str = "Temps";
pub const PAGES_DIR_NAME: &'static str = "Pages";
pub const PAGE_CONTAINER_PREFIX: &'static str = "Page_";
pub const RES_DIR_NAME: &'static str = "Res";
pub const ANNOTS_DIR_NAME: &'static str = "Annots";
pub const ANNOTATIONS_FILE_NAME: &'static str = "Annotations.xml";
pub const ATTACHMENTS_FILE_NAME: &'static str = "Attachments.xml";
#[must_use]
pub fn new(index: u32) -> Self {
Self {
index,
document_file_name: Self::DOCUMENT_FILE_NAME.to_string(),
public_res_file_name: Self::PUBLIC_RES_FILE_NAME.to_string(),
document_res_file_name: Self::DOCUMENT_RES_FILE_NAME.to_string(),
signs_dir_name: Self::SIGNS_DIR_NAME.to_string(),
pages_dir_name: Self::PAGES_DIR_NAME.to_string(),
res_dir_name: Self::RES_DIR_NAME.to_string(),
annots_dir_name: Self::ANNOTS_DIR_NAME.to_string(),
annotations_file_name: Self::ANNOTATIONS_FILE_NAME.to_string(),
attachments_file_name: Self::ATTACHMENTS_FILE_NAME.to_string(),
}
}
#[must_use]
pub fn container_name(&self) -> String {
format!("{}{}", Self::DOC_CONTAINER_PREFIX, self.index)
}
pub fn index(&self) -> u32 {
self.index
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_doc_dir_new() {
let dd = DocDir::new(0);
assert_eq!(dd.index, 0);
assert_eq!(dd.document_file_name, "Document.xml");
assert_eq!(dd.signs_dir_name, "Signs");
assert_eq!(dd.pages_dir_name, "Pages");
}
#[test]
fn test_doc_dir_container_name() {
assert_eq!(DocDir::new(0).container_name(), "Doc_0");
assert_eq!(DocDir::new(3).container_name(), "Doc_3");
}
#[test]
fn test_doc_dir_constants() {
assert_eq!(DocDir::DOC_CONTAINER_PREFIX, "Doc_");
assert_eq!(DocDir::DOCUMENT_FILE_NAME, "Document.xml");
assert_eq!(DocDir::SIGNS_DIR_NAME, "Signs");
assert_eq!(DocDir::PAGES_DIR_NAME, "Pages");
assert_eq!(DocDir::RES_DIR_NAME, "Res");
assert_eq!(DocDir::SIGN_CONTAINER_PREFIX, "Sign_");
}
#[test]
fn test_doc_dir_index() {
let dd = DocDir::new(5);
assert_eq!(dd.index(), 5);
}
}