4
4
use crate :: error:: WasmCoreError ;
5
5
use crate :: storage:: wasm_client_traits:: { v1, v2, WasmClientStorage } ;
6
6
use async_trait:: async_trait;
7
- use js_sys:: { Array , Promise } ;
7
+ use js_sys:: Promise ;
8
8
use serde:: de:: DeserializeOwned ;
9
9
use serde:: Serialize ;
10
10
use wasm_bindgen:: prelude:: * ;
11
11
use wasm_bindgen_futures:: future_to_promise;
12
12
use wasm_storage:: traits:: BaseWasmStorage ;
13
- use wasm_storage:: { IdbVersionChangeEvent , WasmStorage } ;
13
+ use wasm_storage:: {
14
+ Build , Database , RawDbResult , TryFromJs , TryToJs , VersionChangeEvent , WasmStorage ,
15
+ } ;
14
16
use wasm_utils:: error:: { simple_js_error, PromisableResult } ;
15
17
use zeroize:: Zeroizing ;
16
18
@@ -44,28 +46,29 @@ impl ClientStorage {
44
46
// special care must be taken on JS side to ensure it's correctly used there.
45
47
let passphrase = Zeroizing :: new ( passphrase) ;
46
48
47
- let migrate_fn = Some ( |evt : & IdbVersionChangeEvent | -> Result < ( ) , JsValue > {
49
+ let migrate_fn = Some ( |evt : VersionChangeEvent , db : Database | -> RawDbResult < ( ) > {
48
50
// Even if the web-sys bindings expose the version as a f64, the IndexedDB API
49
51
// works with an unsigned integer.
50
52
// See <https://github.com/rustwasm/wasm-bindgen/issues/1149>
51
53
let old_version = evt. old_version ( ) as u32 ;
52
- let db = evt. db ( ) ;
53
54
54
55
if old_version < 1 {
55
56
// migrating to version 2
56
57
57
- db. create_object_store ( v1:: KEYS_STORE ) ?;
58
- db. create_object_store ( v1:: CORE_STORE ) ?;
58
+ db. create_object_store ( v1:: KEYS_STORE ) . build ( ) ?;
59
+ db. create_object_store ( v1:: CORE_STORE ) . build ( ) ?;
59
60
60
- db. create_object_store ( v2:: GATEWAY_REGISTRATIONS_ACTIVE_GATEWAY_STORE ) ?;
61
- db. create_object_store ( v2:: GATEWAY_REGISTRATIONS_REGISTERED_GATEWAYS_STORE ) ?;
61
+ db. create_object_store ( v2:: GATEWAY_REGISTRATIONS_ACTIVE_GATEWAY_STORE )
62
+ . build ( ) ?;
63
+ db. create_object_store ( v2:: GATEWAY_REGISTRATIONS_REGISTERED_GATEWAYS_STORE )
64
+ . build ( ) ?;
62
65
63
66
return Ok ( ( ) ) ;
64
67
}
65
68
66
69
// version 1 -> unimplemented migration
67
70
if old_version < 2 {
68
- return Err ( simple_js_error ( "this client is incompatible with existing storage. please initialise it again." ) ) ;
71
+ return Err ( simple_js_error ( "this client is incompatible with existing storage. please initialise it again." ) . into ( ) ) ;
69
72
}
70
73
71
74
Ok ( ( ) )
@@ -112,7 +115,7 @@ impl BaseWasmStorage for ClientStorage {
112
115
async fn read_value < T , K > ( & self , store : & str , key : K ) -> Result < Option < T > , Self :: StorageError >
113
116
where
114
117
T : DeserializeOwned ,
115
- K : JsCast ,
118
+ K : TryToJs ,
116
119
{
117
120
Ok ( self . inner . read_value ( store, key) . await ?)
118
121
}
@@ -125,33 +128,33 @@ impl BaseWasmStorage for ClientStorage {
125
128
) -> Result < ( ) , Self :: StorageError >
126
129
where
127
130
T : Serialize ,
128
- K : JsCast ,
131
+ K : TryToJs + TryFromJs ,
129
132
{
130
133
Ok ( self . inner . store_value ( store, key, value) . await ?)
131
134
}
132
135
133
136
async fn remove_value < K > ( & self , store : & str , key : K ) -> Result < ( ) , Self :: StorageError >
134
137
where
135
- K : JsCast ,
138
+ K : TryToJs ,
136
139
{
137
140
Ok ( self . inner . remove_value ( store, key) . await ?)
138
141
}
139
142
140
143
async fn has_value < K > ( & self , store : & str , key : K ) -> Result < bool , Self :: StorageError >
141
144
where
142
- K : JsCast ,
145
+ K : TryToJs ,
143
146
{
144
147
Ok ( self . inner . has_value ( store, key) . await ?)
145
148
}
146
149
147
150
async fn key_count < K > ( & self , store : & str , key : K ) -> Result < u32 , Self :: StorageError >
148
151
where
149
- K : JsCast ,
152
+ K : TryToJs ,
150
153
{
151
154
Ok ( self . inner . key_count ( store, key) . await ?)
152
155
}
153
156
154
- async fn get_all_keys ( & self , store : & str ) -> Result < Array , Self :: StorageError > {
157
+ async fn get_all_keys ( & self , store : & str ) -> Result < Vec < JsValue > , Self :: StorageError > {
155
158
Ok ( self . inner . get_all_keys ( store) . await ?)
156
159
}
157
160
}
0 commit comments