use std::sync::Arc;
use bitwarden_state::{
DatabaseConfiguration, Key, Setting, SettingItem, SettingsError,
registry::StateRegistryError,
repository::{Repository, RepositoryItem, RepositoryMigrations},
};
use crate::Client;
pub struct StateClient {
pub(crate) client: Client,
}
impl StateClient {
pub fn register_client_managed<T: 'static + Repository<V>, V: RepositoryItem>(
&self,
store: Arc<T>,
) {
self.client
.internal
.state_registry
.register_client_managed(store)
}
pub async fn initialize_database(
&self,
configuration: DatabaseConfiguration,
migrations: RepositoryMigrations,
) -> Result<(), StateRegistryError> {
self.client
.internal
.state_registry
.initialize_database(configuration, migrations)
.await
}
pub fn get<T>(&self) -> Result<Arc<dyn Repository<T>>, StateRegistryError>
where
T: RepositoryItem,
{
self.client.internal.state_registry.get()
}
pub fn setting<T>(&self, key: Key<T>) -> Result<Setting<T>, SettingsError> {
let repository = self.client.internal.state_registry.get::<SettingItem>()?;
Ok(Setting::new(repository, key))
}
}