- Remove hardcoded dependencies in kvstore Cargo.toml; use features instead. This allows for more flexible compilation for different targets (native vs. WASM). - Improve logging in vault crate using the `log` crate. This makes debugging easier and provides more informative output during execution. Native tests use `env_logger`, WASM tests use `console_log`. - Update README to reflect new logging best practices. - Add cfg attributes to native and wasm modules to improve clarity. - Update traits.rs to specify Send + Sync behavior expectations.
kvstore: Async Key-Value Store for Native and WASM
kvstore provides a runtime-agnostic, async trait for key-value storage, with robust implementations for both native (using sled) and browser/WASM (using IndexedDB via the idb crate) environments.
Features
- Unified async trait: Same API for all platforms. Methods: get,set,remove,contains_key,keys,clear.
- Native backend: Uses sledfor fast, embedded storage. Blocking I/O is offloaded withtokio::task::spawn_blocking.
- WASM backend: Uses IndexedDB via the idbcrate for browser storage. Fully async and Promise-based.
- Error handling: Consistent error types across platforms.
- Conditional compilation: Uses Cargo features and cfgto select the backend.
Usage
Add to your Cargo.toml:
[dependencies]
kvstore = { path = "../kvstore" }
Example
use kvstore::{KVStore, NativeStore};
#[tokio::main]
async fn main() {
    let store = NativeStore::open("/tmp/mydb").unwrap();
    store.set("foo", b"bar").await.unwrap();
    let val = store.get("foo").await.unwrap();
    println!("Got: {:?}", val);
}
For WASM/browser, use WasmStore and run in a browser environment.
Testing
Native
cargo test -p kvstore --features native
WASM (browser)
cd kvstore
wasm-pack test --headless --firefox --features web
Architecture
- See ../docs/Architecture.mdfor full design details.
License
MIT OR Apache-2.0