- Add WASM build target and dependencies for all crates. - Implement IndexedDB-based persistent storage for WASM. - Create browser extension infrastructure (UI, scripting, etc.). - Integrate Rhai scripting engine for secure automation. - Implement user stories and documentation for the extension. |
||
---|---|---|
.. | ||
src | ||
tests | ||
Cargo.toml | ||
README.md |
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
sled
for fast, embedded storage. Blocking I/O is offloaded withtokio::task::spawn_blocking
. - WASM backend: Uses IndexedDB via the
idb
crate for browser storage. Fully async and Promise-based. - Error handling: Consistent error types across platforms.
- Conditional compilation: Uses Cargo features and
cfg
to 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.md
for full design details.
License
MIT OR Apache-2.0