diff --git a/libimagstore/src/file_abstraction/stdio/mapper/json.rs b/libimagstore/src/file_abstraction/stdio/mapper/json.rs index b3772b85..74d9e6eb 100644 --- a/libimagstore/src/file_abstraction/stdio/mapper/json.rs +++ b/libimagstore/src/file_abstraction/stdio/mapper/json.rs @@ -33,7 +33,7 @@ use storeid::StoreId; use libimagerror::into::IntoError; -#[derive(Deserialize, Serialize)] +#[derive(Debug, Deserialize, Serialize)] struct BackendEntry { header: serde_json::Value, content: String, @@ -53,7 +53,7 @@ impl BackendEntry { } -#[derive(Deserialize, Serialize)] +#[derive(Debug, Deserialize, Serialize)] struct Document { version: String, store: HashMap, @@ -72,9 +72,13 @@ impl JsonMapper { impl Mapper for JsonMapper { fn read_to_fs(&self, r: &mut R, hm: &mut HashMap) -> Result<()> { let mut document = { + debug!("Reading Document"); let mut s = String::new(); try!(r.read_to_string(&mut s).map_err_into(SEK::IoError)); + debug!("Document = {:?}", s); + debug!("Parsing Document"); let doc : Document = try!(serde_json::from_str(&s).map_err_into(SEK::IoError)); + debug!("Document = {:?}", doc); doc }; @@ -84,6 +88,10 @@ impl Mapper for JsonMapper { // safe because cargo does not compile if crate version is not valid let crate_version = ::semver::Version::parse(version!()).unwrap(); + debug!("Document version vs. own version: {doc_vers} > {crate_vers}", + doc_vers = doc_vers, + crate_vers = crate_version); + if doc_vers > crate_version { Err(SEK::VersionError.into_error()) } else { @@ -92,9 +100,11 @@ impl Mapper for JsonMapper { })); for (key, val) in document.store.drain() { + debug!("(key, value) ({:?}, {:?})", key, val); let res = val .to_string() .and_then(|vals| { + debug!("value string = {:?}", vals); StoreId::new_baseless(key.clone()) .and_then(|id| Entry::from_str(id, &vals)) .map(|entry| hm.insert(key, entry)) @@ -153,6 +163,18 @@ mod test { use super::*; + #[test] + fn test_empty_json_to_fs() { + let json = r#"{"version":"0.3.0","store":{}}"#; + let mut json = Cursor::new(String::from(json).into_bytes()); + let mapper = JsonMapper::new(); + let mut hm = HashMap::new(); + + let io_res = mapper.read_to_fs(&mut json, &mut hm); + assert!(io_res.is_ok()); + assert!(hm.is_empty()); + } + #[test] fn test_json_to_fs() { let json = r#" diff --git a/libimagstore/src/store.rs b/libimagstore/src/store.rs index 52691cfb..58b7c49b 100644 --- a/libimagstore/src/store.rs +++ b/libimagstore/src/store.rs @@ -105,21 +105,26 @@ impl Iterator for Walk { type Item = StoreObject; fn next(&mut self) -> Option { + while let Some(something) = self.dirwalker.next() { + debug!("[Walk] Processing next item: {:?}", something); match something { Ok(next) => if next.file_type().is_dir() { - return Some(StoreObject::Collection(next.path().to_path_buf())) - } else if next.file_type().is_file() { - let n = next.path().to_path_buf(); - let sid = match StoreId::new(Some(self.store_path.clone()), n) { - Err(e) => { - trace_error(&e); - continue; - }, - Ok(o) => o, - }; - return Some(StoreObject::Id(sid)) - }, + debug!("Found directory..."); + return Some(StoreObject::Collection(next.path().to_path_buf())) + } else /* if next.file_type().is_file() */ { + debug!("Found file..."); + let n = next.path().to_path_buf(); + let sid = match StoreId::from_full_path(&self.store_path, n) { + Err(e) => { + debug!("Could not construct StoreId object from it"); + trace_error(&e); + continue; + }, + Ok(o) => o, + }; + return Some(StoreObject::Id(sid)) + }, Err(e) => { warn!("Error in Walker"); debug!("{:?}", e); diff --git a/libimagstore/src/storeid.rs b/libimagstore/src/storeid.rs index 8f63d66d..59868d95 100644 --- a/libimagstore/src/storeid.rs +++ b/libimagstore/src/storeid.rs @@ -67,6 +67,7 @@ impl StoreId { } pub fn new_baseless(id: PathBuf) -> Result { + debug!("Trying to get a new baseless id from: {:?}", id); if id.is_absolute() { Err(SEK::StoreIdLocalPartAbsoluteError.into_error()) } else {