Skip to content

Commit 6abafb1

Browse files
authored
add open_latest_version function (#1)
1 parent d731353 commit 6abafb1

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/factory.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,31 @@ impl<Err: 'static> Factory<Err> {
147147

148148
Ok(Database::from_sys(db))
149149
}
150+
151+
/// Open a database at the latest version
152+
///
153+
/// Returns an error if something failed while opening.
154+
/// Blocks until it can actually open the database.
155+
///
156+
/// This internally uses [`IDBFactory::open`](https://developer.mozilla.org/en-US/docs/Web/API/IDBFactory/open)
157+
/// as well as the methods from [`IDBOpenDBRequest`](https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest)
158+
pub async fn open_latest_version(&self, name: &str) -> crate::Result<Database<Err>, Err> {
159+
let open_req = self.sys.open(name).map_err(crate::Error::from_js_value)?;
160+
161+
let completion_fut = generic_request(open_req.clone().into())
162+
.map(|res| res.map_err(crate::Error::from_js_event));
163+
pin_mut!(completion_fut);
164+
165+
completion_fut.await?;
166+
167+
let db = open_req
168+
.result()
169+
.map_err(crate::Error::from_js_value)?
170+
.dyn_into::<IdbDatabase>()
171+
.expect("Result of successful IDBOpenDBRequest is not an IDBDatabase");
172+
173+
Ok(Database::from_sys(db))
174+
}
150175
}
151176

152177
/// Wrapper for [`IDBVersionChangeEvent`](https://developer.mozilla.org/en-US/docs/Web/API/IDBVersionChangeEvent)

tests/js.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ async fn smoke_test() {
4343
.await
4444
.unwrap_err();
4545

46+
// Factory::open_latest_version
47+
let db = factory.open_latest_version("foo").await.unwrap();
48+
assert_eq!(db.name(), "foo");
49+
assert_eq!(db.version(), 2);
50+
4651
// Database::build_object_store
4752
let db = factory
4853
.open("bar", 1, |evt| async move {

0 commit comments

Comments
 (0)