#![cfg_attr(not(target_arch = "wasm32"), allow(unused))]
#[cfg(feature = "state-store")]
use matrix_sdk_base::store::StoreError;
use thiserror::Error;
#[cfg(feature = "e2e-encryption")]
mod crypto_store;
mod safe_encode;
#[cfg(feature = "e2e-encryption")]
mod serialize_bool_for_indexeddb;
#[cfg(feature = "state-store")]
mod state_store;
#[cfg(feature = "e2e-encryption")]
pub use crypto_store::{IndexeddbCryptoStore, IndexeddbCryptoStoreError};
#[cfg(feature = "state-store")]
pub use state_store::{
IndexeddbStateStore, IndexeddbStateStoreBuilder, IndexeddbStateStoreError,
MigrationConflictStrategy,
};
#[cfg(all(feature = "e2e-encryption", feature = "state-store"))]
pub async fn open_stores_with_name(
name: &str,
passphrase: Option<&str>,
) -> Result<(IndexeddbStateStore, IndexeddbCryptoStore), OpenStoreError> {
let mut builder = IndexeddbStateStore::builder().name(name.to_owned());
if let Some(passphrase) = passphrase {
builder = builder.passphrase(passphrase.to_owned());
}
let state_store = builder.build().await.map_err(StoreError::from)?;
let crypto_store =
IndexeddbCryptoStore::open_with_store_cipher(name, state_store.store_cipher.clone())
.await?;
Ok((state_store, crypto_store))
}
#[cfg(feature = "state-store")]
pub async fn open_state_store(
name: &str,
passphrase: Option<&str>,
) -> Result<IndexeddbStateStore, OpenStoreError> {
let mut builder = IndexeddbStateStore::builder().name(name.to_owned());
if let Some(passphrase) = passphrase {
builder = builder.passphrase(passphrase.to_owned());
}
let state_store = builder.build().await.map_err(StoreError::from)?;
Ok(state_store)
}
#[derive(Error, Debug)]
pub enum OpenStoreError {
#[cfg(feature = "state-store")]
#[error(transparent)]
State(#[from] StoreError),
#[cfg(feature = "e2e-encryption")]
#[error(transparent)]
Crypto(#[from] IndexeddbCryptoStoreError),
}