Add functions to get by id and remove with FileLockEntry

Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
This commit is contained in:
Matthias Beyer 2019-12-08 13:37:21 +01:00
parent 75ab0c1408
commit 37b7b2e67e

View file

@ -36,9 +36,12 @@ pub trait BookmarkStore {
fn add_bookmark<'a>(&'a self, url: Url) -> Result<(Uuid, FileLockEntry<'a>)>; 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_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_by_uuid(&self, uuid: &Uuid) -> Result<()>;
fn remove_bookmark<'a>(&self, fle: FileLockEntry<'a>) -> Result<()>;
fn all_bookmarks<'a>(&'a self) -> Result<Entries<'a>>; 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)) 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<()> { fn remove_bookmark_by_uuid(&self, uuid: &Uuid) -> Result<()> {
id_for_uuid(uuid).and_then(|id| self.delete(id)) 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>> { fn all_bookmarks<'a>(&'a self) -> Result<Entries<'a>> {
self.entries()?.in_collection("bookmark") self.entries()?.in_collection("bookmark")
} }