use std::error::Error;
use std::sync::Arc;
use openmls_traits::storage::StorageProvider;
use crate::mls_crypto::MlsError;
pub trait DeMlsStorage {
type MlsStorage: StorageProvider<1, Error = Self::StorageError>;
type StorageError: Error + Send + Sync + 'static;
fn store_key_package_ref(&self, hash_ref: &[u8]) -> Result<(), MlsError>;
fn is_our_key_package(&self, hash_ref: &[u8]) -> Result<bool, MlsError>;
fn remove_key_package_ref(&self, hash_ref: &[u8]) -> Result<(), MlsError>;
fn mls_storage(&self) -> &Self::MlsStorage;
}
impl<S: DeMlsStorage + ?Sized> DeMlsStorage for Arc<S> {
type MlsStorage = S::MlsStorage;
type StorageError = S::StorageError;
fn store_key_package_ref(&self, hash_ref: &[u8]) -> Result<(), MlsError> {
(**self).store_key_package_ref(hash_ref)
}
fn is_our_key_package(&self, hash_ref: &[u8]) -> Result<bool, MlsError> {
(**self).is_our_key_package(hash_ref)
}
fn remove_key_package_ref(&self, hash_ref: &[u8]) -> Result<(), MlsError> {
(**self).remove_key_package_ref(hash_ref)
}
fn mls_storage(&self) -> &Self::MlsStorage {
(**self).mls_storage()
}
}