storage/indexeddb/engines/
mod.rs1use std::collections::VecDeque;
6
7use storage_traits::indexeddb::{AsyncOperation, CreateObjectResult, IndexedDBTxnMode, KeyPath};
8use tokio::sync::oneshot;
9
10pub use self::sqlite::SqliteEngine;
11
12mod sqlite;
13
14pub struct KvsOperation {
15 pub store_name: String,
16 pub operation: AsyncOperation,
17}
18
19pub struct KvsTransaction {
20 pub mode: IndexedDBTxnMode,
23 pub requests: VecDeque<KvsOperation>,
24}
25
26pub trait KvsEngine {
27 type Error: std::error::Error;
28
29 fn create_store(
30 &self,
31 store_name: &str,
32 key_path: Option<KeyPath>,
33 auto_increment: bool,
34 ) -> Result<CreateObjectResult, Self::Error>;
35
36 fn delete_store(&self, store_name: &str) -> Result<(), Self::Error>;
37
38 #[expect(dead_code)]
39 fn close_store(&self, store_name: &str) -> Result<(), Self::Error>;
40
41 fn delete_database(self) -> Result<(), Self::Error>;
42
43 fn process_transaction(
44 &self,
45 transaction: KvsTransaction,
46 ) -> oneshot::Receiver<Option<Vec<u8>>>;
47
48 fn has_key_generator(&self, store_name: &str) -> bool;
49 fn key_path(&self, store_name: &str) -> Option<KeyPath>;
50
51 fn create_index(
52 &self,
53 store_name: &str,
54 index_name: String,
55 key_path: KeyPath,
56 unique: bool,
57 multi_entry: bool,
58 ) -> Result<CreateObjectResult, Self::Error>;
59 fn delete_index(&self, store_name: &str, index_name: String) -> Result<(), Self::Error>;
60
61 fn version(&self) -> Result<u64, Self::Error>;
62 fn set_version(&self, version: u64) -> Result<(), Self::Error>;
63}