diff --git a/src/database/mod.rs b/src/database/mod.rs index 5403253..97928e9 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -4,12 +4,11 @@ mod space_db; mod space_index; use std::collections::HashMap; -use std::fs::File; use ironsea_index::Indexed; -use memmap::Mmap; use serde::Serialize; +use super::storage; pub use db_core::Core; pub use db_core::CoreQueryParameters; pub use db_core::Properties; @@ -73,22 +72,8 @@ impl DataBase { Ok(DataBase::new(spaces, cores)) } - fn mmap_file(filename: &str) -> Result { - let file_in = match File::open(filename) { - Err(e) => return Err(format!("{:?}", e)), - Ok(file) => file, - }; - - match unsafe { Mmap::map(&file_in) } { - Err(e) => Err(format!("{:?}", e)), - Ok(mmap) => Ok(mmap), - } - } - fn load_core(name: &str) -> Result<(Vec, Core), String> { - let mmap = DataBase::mmap_file(&name)?; - - match bincode::deserialize(&mmap[..]) { + match storage::bincode::load(name) { Err(e) => Err(format!("Index deserialization error: {:?}", e)), Ok(index) => Ok(index), } diff --git a/src/storage/bincode.rs b/src/storage/bincode.rs index 131c3aa..d3cb7f3 100644 --- a/src/storage/bincode.rs +++ b/src/storage/bincode.rs @@ -61,7 +61,15 @@ pub fn build( let objects = load::>(&fn_objects)?; - let core = model::build_index(name, version, &spaces, &objects, scales, max_elements); + let core = match model::build_index(name, version, &spaces, &objects, scales, max_elements) { + Ok(core) => core, + Err(e) => { + return Err(Error::new( + ErrorKind::InvalidData, + format!("Failure to build index: {:?}", e), + )) + } + }; store((spaces, core), &fn_index) }