use idb::{builder::DatabaseBuilder, Factory};
use crate::{ObjectStore, Result, Rexie};
pub struct RexieBuilder {
name: String,
builder: DatabaseBuilder,
}
impl RexieBuilder {
pub fn new(name: &str) -> Self {
Self {
name: name.to_owned(),
builder: DatabaseBuilder::new(name),
}
}
pub fn version(mut self, version: u32) -> Self {
self.builder = self.builder.version(version);
self
}
pub fn add_object_store(mut self, object_store: ObjectStore) -> Self {
self.builder = self.builder.add_object_store(object_store.builder);
self
}
pub async fn build(self) -> Result<Rexie> {
let database = self.builder.build().await?;
Ok(Rexie { database })
}
pub async fn delete(self) -> Result<()> {
let factory = Factory::new()?;
factory.delete(&self.name)?.await.map_err(Into::into)
}
}