pub mod create;
pub mod document;
use crate::storage::MultiStorage;
use std::error::Error;
pub fn default_set_file_list(
filename: Option<&String>,
directory: Option<&String>,
attachments: Option<&str>,
) -> Result<Vec<String>, Box<dyn Error>> {
let storage: MultiStorage = get_storage_default_for_cli()?;
set_file_list(&storage, filename, directory, attachments)
}
fn set_file_list(
storage: &MultiStorage,
filename: Option<&String>,
directory: Option<&String>,
attachments: Option<&str>,
) -> Result<Vec<String>, Box<dyn Error>> {
if let Some(file) = filename {
Ok(vec![file.clone()])
} else if let Some(dir) = directory {
let prefix = if dir.ends_with('/') {
dir.clone()
} else {
format!("{}/", dir)
};
let files = storage.list(&prefix, None)?;
Ok(files.into_iter().filter(|f| f.ends_with(".json")).collect())
} else if attachments.is_some() {
Ok(Vec::new())
} else {
Err("You must specify either a filename, a directory, or attachments.".into())
}
}
pub fn get_storage_default_for_cli() -> Result<MultiStorage, Box<dyn Error>> {
let storage: Option<MultiStorage> =
Some(MultiStorage::default_new().expect("Failed to initialize storage"));
if let Some(storage) = storage {
Ok(storage)
} else {
Err("Storage not initialized".into())
}
}