Skip to content

Commit 61a4433

Browse files
authored
chore: update indexed_db_futures (#5347)
* chore: update indexed_db_futures * clippy
1 parent 5c89d36 commit 61a4433

File tree

9 files changed

+210
-128
lines changed

9 files changed

+210
-128
lines changed

Cargo.lock

+82-20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-2
Original file line numberDiff line numberDiff line change
@@ -398,8 +398,7 @@ prost = { version = "0.12", default-features = false }
398398
gloo-utils = "0.2.0"
399399
gloo-net = "0.6.0"
400400

401-
# TODO: migrate to 0.6+
402-
indexed_db_futures = "0.4.2"
401+
indexed_db_futures = "0.6.0"
403402
js-sys = "0.3.76"
404403
serde-wasm-bindgen = "0.6.5"
405404
tsify = "0.4.5"

common/wasm/client-core/src/storage/mod.rs

+18-15
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
use crate::error::WasmCoreError;
55
use crate::storage::wasm_client_traits::{v1, v2, WasmClientStorage};
66
use async_trait::async_trait;
7-
use js_sys::{Array, Promise};
7+
use js_sys::Promise;
88
use serde::de::DeserializeOwned;
99
use serde::Serialize;
1010
use wasm_bindgen::prelude::*;
1111
use wasm_bindgen_futures::future_to_promise;
1212
use wasm_storage::traits::BaseWasmStorage;
13-
use wasm_storage::{IdbVersionChangeEvent, WasmStorage};
13+
use wasm_storage::{
14+
Build, Database, RawDbResult, TryFromJs, TryToJs, VersionChangeEvent, WasmStorage,
15+
};
1416
use wasm_utils::error::{simple_js_error, PromisableResult};
1517
use zeroize::Zeroizing;
1618

@@ -44,28 +46,29 @@ impl ClientStorage {
4446
// special care must be taken on JS side to ensure it's correctly used there.
4547
let passphrase = Zeroizing::new(passphrase);
4648

47-
let migrate_fn = Some(|evt: &IdbVersionChangeEvent| -> Result<(), JsValue> {
49+
let migrate_fn = Some(|evt: VersionChangeEvent, db: Database| -> RawDbResult<()> {
4850
// Even if the web-sys bindings expose the version as a f64, the IndexedDB API
4951
// works with an unsigned integer.
5052
// See <https://github.com/rustwasm/wasm-bindgen/issues/1149>
5153
let old_version = evt.old_version() as u32;
52-
let db = evt.db();
5354

5455
if old_version < 1 {
5556
// migrating to version 2
5657

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()?;
5960

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()?;
6265

6366
return Ok(());
6467
}
6568

6669
// version 1 -> unimplemented migration
6770
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());
6972
}
7073

7174
Ok(())
@@ -112,7 +115,7 @@ impl BaseWasmStorage for ClientStorage {
112115
async fn read_value<T, K>(&self, store: &str, key: K) -> Result<Option<T>, Self::StorageError>
113116
where
114117
T: DeserializeOwned,
115-
K: JsCast,
118+
K: TryToJs,
116119
{
117120
Ok(self.inner.read_value(store, key).await?)
118121
}
@@ -125,33 +128,33 @@ impl BaseWasmStorage for ClientStorage {
125128
) -> Result<(), Self::StorageError>
126129
where
127130
T: Serialize,
128-
K: JsCast,
131+
K: TryToJs + TryFromJs,
129132
{
130133
Ok(self.inner.store_value(store, key, value).await?)
131134
}
132135

133136
async fn remove_value<K>(&self, store: &str, key: K) -> Result<(), Self::StorageError>
134137
where
135-
K: JsCast,
138+
K: TryToJs,
136139
{
137140
Ok(self.inner.remove_value(store, key).await?)
138141
}
139142

140143
async fn has_value<K>(&self, store: &str, key: K) -> Result<bool, Self::StorageError>
141144
where
142-
K: JsCast,
145+
K: TryToJs,
143146
{
144147
Ok(self.inner.has_value(store, key).await?)
145148
}
146149

147150
async fn key_count<K>(&self, store: &str, key: K) -> Result<u32, Self::StorageError>
148151
where
149-
K: JsCast,
152+
K: TryToJs,
150153
{
151154
Ok(self.inner.key_count(store, key).await?)
152155
}
153156

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> {
155158
Ok(self.inner.get_all_keys(store).await?)
156159
}
157160
}

common/wasm/client-core/src/storage/wasm_client_traits.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -286,8 +286,8 @@ pub trait WasmClientStorage: BaseWasmStorage {
286286
.await
287287
.map_err(Into::into)
288288
.map(|arr| {
289-
arr.to_vec()
290-
.into_iter()
289+
arr.iter()
290+
.cloned()
291291
.filter_map(|key| key.as_string())
292292
.collect()
293293
})

common/wasm/storage/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ license.workspace = true
99

1010
[dependencies]
1111
async-trait = { workspace = true }
12-
futures = { workspace = true }
12+
getrandom = { workspace = true, features = ["js"] }
1313
js-sys = { workspace = true }
1414
wasm-bindgen = { workspace = true }
1515
serde = { workspace = true, features = ["derive"] }

0 commit comments

Comments
 (0)