diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2019-12-08 13:37:21 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2019-12-08 13:48:47 +0100 |
commit | 37b7b2e67ea89c492abc1b6c6f3b62c5c643e75d (patch) | |
tree | f200530561bd83c08a85c7801117c0d9eab65e4f | |
parent | 75ab0c1408ae400a40e80277c7fbdd82e0a8c474 (diff) |
Add functions to get by id and remove with FileLockEntry
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | lib/domain/libimagbookmark/src/store.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/domain/libimagbookmark/src/store.rs b/lib/domain/libimagbookmark/src/store.rs index d11fe331..9e3d4429 100644 --- a/lib/domain/libimagbookmark/src/store.rs +++ b/lib/domain/libimagbookmark/src/store.rs @@ -36,9 +36,12 @@ pub trait BookmarkStore { fn add_bookmark<'a>(&'a self, url: Url) -> Result<(Uuid, FileLockEntry<'a>)>; fn get_bookmark_by_uuid<'a>(&'a self, uuid: &Uuid) -> Result<Option<FileLockEntry<'a>>>; + fn get_bookmark_by_id<'a>(&'a self, sid: StoreId) -> Result<Option<FileLockEntry<'a>>>; fn remove_bookmark_by_uuid(&self, uuid: &Uuid) -> Result<()>; + fn remove_bookmark<'a>(&self, fle: FileLockEntry<'a>) -> Result<()>; + fn all_bookmarks<'a>(&'a self) -> Result<Entries<'a>>; } @@ -58,10 +61,41 @@ impl BookmarkStore for Store { id_for_uuid(uuid).and_then(|id| self.get(id)) } + /// Get a bookmark by store id + /// + /// + /// # Warning + /// + /// Returns an error if the StoreId does not refer to an entry that is a Bookmark. + /// If you want to ignore these errors on this API level and handle these errors yourself, + /// use Store::get() + /// + fn get_bookmark_by_id<'a>(&'a self, sid: StoreId) -> Result<Option<FileLockEntry<'a>>> { + if let Some(entry) = self.get(sid)? { + if !entry.is_bookmark()? { + return Err(format_err!("Not a bookmark: {}", entry.get_location())); + } else { + Ok(Some(entry)) + } + } else { + Ok(None) + } + } + fn remove_bookmark_by_uuid(&self, uuid: &Uuid) -> Result<()> { id_for_uuid(uuid).and_then(|id| self.delete(id)) } + fn remove_bookmark<'a>(&self, fle: FileLockEntry<'a>) -> Result<()> { + if fle.is_bookmark()? { + let id = fle.get_location().clone(); + drop(fle); + self.delete(id) + } else { + Err(format_err!("Not a bookmark: {}", fle.get_location())) + } + } + fn all_bookmarks<'a>(&'a self) -> Result<Entries<'a>> { self.entries()?.in_collection("bookmark") } |