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 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")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue