Doc: Update README.md
This commit is contained in:
parent
44b4dfd6a7
commit
0224755ba3
54
README.md
54
README.md
@ -13,6 +13,24 @@ A modular, async, and cross-platform cryptographic stack in Rust. Built for both
|
|||||||
- **browser_extension/** _(planned)_: Browser extension for secure scripting and automation
|
- **browser_extension/** _(planned)_: Browser extension for secure scripting and automation
|
||||||
- **rhai scripting** _(planned)_: Unified scripting API for both CLI and browser (see [`docs/rhai_architecture_plan.md`](docs/rhai_architecture_plan.md))
|
- **rhai scripting** _(planned)_: Unified scripting API for both CLI and browser (see [`docs/rhai_architecture_plan.md`](docs/rhai_architecture_plan.md))
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## What is Rust Conditional Compilation?
|
||||||
|
|
||||||
|
Rust's conditional compilation allows you to write code that only gets included for certain platforms or configurations. This is done using attributes like `#[cfg(target_arch = "wasm32")]` for WebAssembly, or `#[cfg(not(target_arch = "wasm32"))]` for native platforms. It enables a single codebase to support multiple targets (such as desktop and browser) with platform-specific logic where needed.
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
```rust
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
// This code only compiles for WebAssembly targets
|
||||||
|
```
|
||||||
|
|
||||||
|
## What is WASM (WebAssembly)?
|
||||||
|
|
||||||
|
WebAssembly (WASM) is a binary instruction format for a stack-based virtual machine. It allows code written in languages like Rust, C, or C++ to run at near-native speed in web browsers and other environments. In this project, WASM enables the cryptographic vault to work securely inside the browser, exposing Rust functions to JavaScript and web applications.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Directory Structure
|
## Directory Structure
|
||||||
> **Note:** Some directories are planned for future extensibility and scripting, and may not exist yet in the current workspace.
|
> **Note:** Some directories are planned for future extensibility and scripting, and may not exist yet in the current workspace.
|
||||||
|
|
||||||
@ -36,6 +54,42 @@ A modular, async, and cross-platform cryptographic stack in Rust. Built for both
|
|||||||
- **Extensible:** Trait-based APIs for signers and providers, ready for scripting and new integrations
|
- **Extensible:** Trait-based APIs for signers and providers, ready for scripting and new integrations
|
||||||
- **Tested everywhere:** Native and browser (WASM) backends are covered by automated tests and a unified Makefile
|
- **Tested everywhere:** Native and browser (WASM) backends are covered by automated tests and a unified Makefile
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conditional Compilation & WASM Support
|
||||||
|
|
||||||
|
This project makes extensive use of Rust's conditional compilation to support both native and WebAssembly (WASM) environments with a single codebase. Key points:
|
||||||
|
|
||||||
|
- **Platform-specific code:**
|
||||||
|
- Rust's `#[cfg(target_arch = "wasm32")]` attribute is used to write WASM-specific code, while `#[cfg(not(target_arch = "wasm32"))]` is for native targets.
|
||||||
|
- This pattern is used for struct definitions, method implementations, and even module imports.
|
||||||
|
|
||||||
|
- **Example: SessionManager**
|
||||||
|
```rust
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
pub struct SessionManager<S: KVStore + Send + Sync> { ... }
|
||||||
|
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
pub struct SessionManager<S: KVStore> { ... }
|
||||||
|
```
|
||||||
|
|
||||||
|
- **WASM Bindings:**
|
||||||
|
- The `wasm_app` crate uses `wasm-bindgen` to expose Rust functions to JavaScript, enabling browser integration.
|
||||||
|
- Functions are annotated with `#[wasm_bindgen]` and exported for use in JS/TS.
|
||||||
|
|
||||||
|
- **Storage Backends:**
|
||||||
|
- Native uses `sled` or other file-based stores.
|
||||||
|
- WASM uses IndexedDB (via `kvstore::wasm::WasmStore`).
|
||||||
|
|
||||||
|
- **Building for WASM:**
|
||||||
|
- Use `wasm-pack build --target web` to build the WASM package.
|
||||||
|
- Serve the resulting files with a static server for browser use.
|
||||||
|
|
||||||
|
- **Testing:**
|
||||||
|
- Both native and WASM tests are supported. WASM tests can be run in headless browsers using `wasm-pack test --headless --firefox` or similar commands.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Building and Testing
|
## Building and Testing
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
Loading…
Reference in New Issue
Block a user