Skip to content

Repository files navigation

rexie

Rexie is an easy-to-use, futures based wrapper around IndexedDB that compiles to webassembly.

I don’t plan to add new features to this crate, but I’ll continue to fix bugs as they come up.

For new projects, I recommend considering idb, which provides a similar API and is the crate I plan to maintain more actively going forward.

Usage

To use Rexie, you need to add the following to your Cargo.toml:

[dependencies]
rexie = "0.6"

Example

To create a new database, you can use the [Rexie::builder] method:

use rexie::*;asyncfnbuild_database() -> Result<Rexie>{// Create a new databaselet rexie = Rexie::builder("test")// Set the version of the database to 1.0.version(1)// Add an object store named `employees`.add_object_store(ObjectStore::new("employees")// Set the key path to `id`.key_path("id")// Enable auto increment.auto_increment(true)// Add an index named `email` with the key path `email` with unique enabled.add_index(Index::new("email","email").unique(true)),)// Build the database.build().await?;// Check basic details of the databaseassert_eq!(rexie.name(),"test");assert_eq!(rexie.version(),Ok(1));assert_eq!(rexie.store_names(), vec!["employees"]);Ok(rexie)}

To add an employee, you can use the [Store::add] method after creating a [Transaction]:

use rexie::*;asyncfnadd_employee(rexie:&Rexie,name:&str,email:&str) -> Result<u32>{// Create a new read-write transactionlet transaction = rexie.transaction(&["employees"],TransactionMode::ReadWrite)?;// Get the `employees` storelet employees = transaction.store("employees")?;// Create an employeelet employee = serde_json::json!({"name": name,"email": email,});// Convert it to `JsValue`let employee = serde_wasm_bindgen::to_value(&employee).unwrap();// Add the employee to the storelet employee_id = employees.add(&employee,None).await?;// Waits for the transaction to complete
transaction.done().await?;// Return the employee idOk(num_traits::cast(employee_id.as_f64().unwrap()).unwrap())}

To get an employee, you can use the [Store::get] method after creating a [Transaction]:

use rexie::*;asyncfnget_employee(rexie:&Rexie,id:u32) -> Result<Option<serde_json::Value>>{// Create a new read-only transactionlet transaction = rexie.transaction(&["employees"],TransactionMode::ReadOnly)?;// Get the `employees` storelet employees = transaction.store("employees")?;// Get the employeelet employee = employees.get(id.into()).await?.unwrap();// Convert it to `serde_json::Value` from `JsValue`let employee:Option<serde_json::Value> = serde_wasm_bindgen::from_value(employee).unwrap();// Return the employeeOk(employee)}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

Rexie is an easy-to-use, futures based wrapper around IndexedDB that compiles to webassembly.

Resources

Stars

93 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages