File tree Expand file tree Collapse file tree 2 files changed +30
-0
lines changed Expand file tree Collapse file tree 2 files changed +30
-0
lines changed Original file line number Diff line number Diff 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)
Original file line number Diff line number Diff 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 {
You can’t perform that action at this time.
0 commit comments