summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2019-12-08 13:37:21 +0100
committerMatthias Beyer <mail@beyermatthias.de>2019-12-08 13:48:47 +0100
commit37b7b2e67ea89c492abc1b6c6f3b62c5c643e75d (patch)
treef200530561bd83c08a85c7801117c0d9eab65e4f
parent75ab0c1408ae400a40e80277c7fbdd82e0a8c474 (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.rs34
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")
}