feat: Refactor kvstore and vault to use features and logging
- 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.
This commit is contained in:
		| @@ -8,24 +8,21 @@ path = "src/lib.rs" | ||||
|  | ||||
| [dependencies] | ||||
| async-trait = "0.1" | ||||
| sled = { version = "0.34", optional = true } | ||||
| idb = { version = "0.4", optional = true } | ||||
| js-sys = "0.3" | ||||
| wasm-bindgen = "0.2" | ||||
| wasm-bindgen-futures = "0.4" | ||||
| thiserror = "1" | ||||
| tempfile = "3" | ||||
|  | ||||
| [features] | ||||
| default = [] | ||||
| native = ["sled", "tokio"] | ||||
| web = ["idb"] | ||||
|  | ||||
| [target.'cfg(not(target_arch = "wasm32"))'.dependencies] | ||||
| tokio = { version = "1.45", optional = true, default-features = false, features = ["rt-multi-thread", "macros"] } | ||||
| sled = { version = "0.34" } | ||||
| tokio = { version = "1", features = ["rt-multi-thread", "macros"] } | ||||
|  | ||||
| [target.'cfg(target_arch = "wasm32")'.dependencies] | ||||
| idb = "0.4" | ||||
|  | ||||
| [target.'cfg(target_arch = "wasm32")'.dev-dependencies] | ||||
| idb = { version = "0.4" } | ||||
| wasm-bindgen-test = "0.3" | ||||
|  | ||||
| [features] | ||||
| default = [] | ||||
| native = [] | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
| //! | ||||
| //! # Runtime Requirement | ||||
| //! | ||||
| #![cfg(not(target_arch = "wasm32"))] | ||||
| //! **A Tokio runtime must be running to use this backend.** | ||||
| //! This library does not start or manage a runtime; it assumes that all async methods are called from within an existing Tokio runtime context (e.g., via `#[tokio::main]` or `tokio::test`). | ||||
| //! | ||||
| @@ -10,11 +11,18 @@ | ||||
| //! # Example | ||||
| //! | ||||
|  | ||||
| use crate::traits::KVStore; | ||||
| use crate::error::{KVError, Result}; | ||||
| //! Native backend for kvstore using sled | ||||
| //! Only compiled for non-wasm32 targets | ||||
|  | ||||
| #[cfg(not(target_arch = "wasm32"))] | ||||
| use crate::traits::KVStore; | ||||
| #[cfg(not(target_arch = "wasm32"))] | ||||
| use crate::error::{KVError, Result}; | ||||
| #[cfg(not(target_arch = "wasm32"))] | ||||
| use async_trait::async_trait; | ||||
| #[cfg(not(target_arch = "wasm32"))] | ||||
| use sled::Db; | ||||
| #[cfg(not(target_arch = "wasm32"))] | ||||
| use std::sync::Arc; | ||||
|  | ||||
| #[derive(Clone)] | ||||
|   | ||||
| @@ -16,6 +16,11 @@ use crate::error::Result; | ||||
| /// - contains_key (was exists) | ||||
| /// - keys | ||||
| /// - clear | ||||
| /// Async key-value store interface for both native and WASM backends. | ||||
| /// | ||||
| /// For native (non-wasm32) backends, implementers should be `Send + Sync` to support async usage. | ||||
| /// For WASM (wasm32) backends, `Send + Sync` is not required. | ||||
| #[async_trait::async_trait] | ||||
| pub trait KVStore { | ||||
|     async fn get(&self, key: &str) -> Result<Option<Vec<u8>>>; | ||||
|     async fn set(&self, key: &str, value: &[u8]) -> Result<()>; | ||||
|   | ||||
| @@ -13,12 +13,15 @@ | ||||
| //! | ||||
|  | ||||
|  | ||||
| //! WASM backend for kvstore using IndexedDB (idb crate) | ||||
| //! Only compiled for wasm32 targets | ||||
|  | ||||
| #[cfg(target_arch = "wasm32")] | ||||
| use crate::traits::KVStore; | ||||
| #[cfg(target_arch = "wasm32")] | ||||
| use crate::error::{KVError, Result}; | ||||
|  | ||||
| #[cfg(target_arch = "wasm32")] | ||||
| use async_trait::async_trait; | ||||
|  | ||||
|  | ||||
| #[cfg(target_arch = "wasm32")] | ||||
| use idb::{Database, TransactionMode, Factory}; | ||||
| #[cfg(target_arch = "wasm32")] | ||||
|   | ||||
		Reference in New Issue
	
	Block a user