use std::path::{Path, PathBuf};
use memstead_git_branch::mem_cache::{self, CacheInstallOutcome, InstallError, MountRegistration};
#[derive(Debug)]
pub enum ReadMemResult {
Installed {
archive: PathBuf,
outcome: CacheInstallOutcome,
mount: MountRegistration,
},
Failed { archive: PathBuf, error: String },
}
pub fn install_read_mems(
engine: &mut memstead_base::Engine,
archives: &[PathBuf],
cwd: &Path,
) -> Vec<ReadMemResult> {
let writable: Vec<String> = engine
.mem_router()
.writable_mems()
.iter()
.map(|n| n.to_string())
.collect();
archives
.iter()
.map(|archive| {
let archive = if archive.is_absolute() {
archive.clone()
} else {
cwd.join(archive)
};
let writable_refs: Vec<&str> = writable.iter().map(String::as_str).collect();
let outcome = match mem_cache::install_to_cache(&archive, &writable_refs) {
Ok(o) => o,
Err(e) => {
return ReadMemResult::Failed {
archive,
error: e.to_string(),
};
}
};
match mem_cache::register_cached_archive(engine, &outcome, "--read-mem") {
Ok(mount) => ReadMemResult::Installed {
archive,
outcome,
mount,
},
Err(e) => ReadMemResult::Failed {
archive,
error: e.to_string(),
},
}
})
.collect()
}
pub type ReadMemInstallError = InstallError;