Add functions to get by id and remove with FileLockEntry
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
This commit is contained in:
parent
75ab0c1408
commit
37b7b2e67e
1 changed files with 34 additions and 0 deletions
|
@ -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")
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue