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> {
147
147
148
148
Ok ( Database :: from_sys ( db) )
149
149
}
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
+ }
150
175
}
151
176
152
177
/// 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() {
43
43
. await
44
44
. unwrap_err ( ) ;
45
45
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
+
46
51
// Database::build_object_store
47
52
let db = factory
48
53
. open ( "bar" , 1 , |evt| async move {
You can’t perform that action at this time.
0 commit comments