diff --git a/libimagdiary/src/is_in_diary.rs b/libimagdiary/src/is_in_diary.rs index 9dd8b2cb..2b9d3fc7 100644 --- a/libimagdiary/src/is_in_diary.rs +++ b/libimagdiary/src/is_in_diary.rs @@ -18,7 +18,7 @@ impl IsInDiary for Entry { impl IsInDiary for StoreId { fn is_in_diary(&self, name: &str) -> bool { - self.is_in_collection(&["diary", name]) + self.local().starts_with(format!("diary/{}", name)) } } diff --git a/libimagentrylink/src/external.rs b/libimagentrylink/src/external.rs index 171db965..a6c2faef 100644 --- a/libimagentrylink/src/external.rs +++ b/libimagentrylink/src/external.rs @@ -92,7 +92,7 @@ pub trait ExternalLinker : InternalLinker { /// Check whether the StoreId starts with `/link/external/` pub fn is_external_link_storeid(id: &StoreId) -> bool { debug!("Checking whether this is a link/external/*: '{:?}'", id); - id.is_in_collection(&["link", "external"]) + id.local().starts_with("link/external") } fn get_external_link_from_file(entry: &FileLockEntry) -> Result { diff --git a/libimagstore/src/storeid.rs b/libimagstore/src/storeid.rs index bcf6f8dd..4bb26bf6 100644 --- a/libimagstore/src/storeid.rs +++ b/libimagstore/src/storeid.rs @@ -86,27 +86,9 @@ impl StoreId { self.id.components() } - /// Check whether a StoreId points to an entry in a specific collection. - /// - /// A "collection" here is simply a directory. So `foo/bar/baz` is an entry which is in - /// collection ["foo", "bar"]. - /// - /// # Warning - /// - /// The collection specification _has_ to start with the module name. Otherwise this function - /// may return false negatives. - /// - pub fn is_in_collection(&self, colls: &[&str]) -> bool { - use std::path::Component; - - self.id - .components() - .zip(colls) - .map(|(component, pred_coll)| match component { - Component::Normal(ref s) => s.to_str().map(|ref s| s == pred_coll).unwrap_or(false), - _ => false - }) - .all(|x| x) && colls.last().map(|last| !self.id.ends_with(last)).unwrap_or(false) + /// Get the _local_ part of a StoreId object, as in "the part from the store root to the entry". + pub fn local(&self) -> &PathBuf { + &self.id } } @@ -242,26 +224,4 @@ mod test { assert_eq!(p.into_storeid().unwrap().to_str().unwrap(), "test/test"); } - #[test] - fn storeid_in_collection() { - let p = module_path::ModuleEntryPath::new("1/2/3/4/5/6/7/8/9/0").into_storeid().unwrap(); - - assert!(p.is_in_collection(&["test", "1"])); - assert!(p.is_in_collection(&["test", "1", "2"])); - assert!(p.is_in_collection(&["test", "1", "2", "3"])); - assert!(p.is_in_collection(&["test", "1", "2", "3", "4"])); - assert!(p.is_in_collection(&["test", "1", "2", "3", "4", "5"])); - assert!(p.is_in_collection(&["test", "1", "2", "3", "4", "5", "6"])); - assert!(p.is_in_collection(&["test", "1", "2", "3", "4", "5", "6", "7"])); - assert!(p.is_in_collection(&["test", "1", "2", "3", "4", "5", "6", "7", "8"])); - assert!(p.is_in_collection(&["test", "1", "2", "3", "4", "5", "6", "7", "8", "9"])); - - // "0" is the filename, not a collection - assert!(!p.is_in_collection(&["test", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"])); - - assert!(!p.is_in_collection(&["test", "0", "2", "3", "4", "5", "6", "7", "8", "9", "0"])); - assert!(!p.is_in_collection(&["test", "1", "2", "3", "4", "5", "6", "8"])); - assert!(!p.is_in_collection(&["test", "1", "2", "3", "leet", "5", "6", "7"])); - } - }