pub mod elf_core_snapshot;
pub mod lime_snapshot;
pub mod raw_snapshot;
use crate::memory::readable::Readable;
use {elf_core_snapshot::ElfCoreSnapshot, lime_snapshot::LimeSnapshot, raw_snapshot::RawSnapshot};
use std::{
io::{self, ErrorKind},
path::Path,
sync::Arc,
};
pub fn open_memory(path: &Path) -> io::Result<Arc<dyn Readable>> {
match path.extension().and_then(|ext| ext.to_str()) {
Some("raw") => {
let snapshot: Arc<dyn Readable> = RawSnapshot::new(path)
.map_err(|e| io::Error::other(format!("Failed to open raw snapshot: {e:?}")))?;
Ok(snapshot)
}
Some("lime") => {
let snapshot: Arc<dyn Readable> = LimeSnapshot::new(path)
.map_err(|e| io::Error::other(format!("Failed to open lime snapshot: {e:?}")))?;
Ok(snapshot)
}
Some("elf") => {
let snapshot: Arc<dyn Readable> = ElfCoreSnapshot::new(path).map_err(|e| {
io::Error::other(format!("Failed to open ELF core snapshot: {e:?}"))
})?;
Ok(snapshot)
}
_ => Err(io::Error::new(
ErrorKind::InvalidInput,
"Unsupported memory dump format. Use .raw, .lime, or .elf files.",
)),
}
}