pub struct MdkSqliteStorage { /* private fields */ }Expand description
A SQLite-based storage implementation for MDK.
This struct implements the MdkStorageProvider trait for SQLite databases. It directly interfaces with a SQLite database for storing MLS data, using a single unified connection for both MLS cryptographic state and MDK-specific data (groups, messages, welcomes).
§Unified Storage Architecture
This implementation provides atomic transactions across all MLS and MDK state by using a single database connection. This enables proper rollback for commit race resolution as required by the Marmot Protocol.
§Encryption
All databases are encrypted by default using SQLCipher. Keys are stored securely in the platform’s native keyring (Keychain, Keystore, etc.).
§Example
use mdk_sqlite_storage::MdkSqliteStorage;
// Create encrypted storage (production - recommended)
let storage = MdkSqliteStorage::new(
"/path/to/db.sqlite",
"com.example.myapp",
"mdk.db.key.default"
)?;Implementations§
Source§impl MdkSqliteStorage
impl MdkSqliteStorage
Sourcepub fn new<P>(
file_path: P,
service_id: &str,
db_key_id: &str,
) -> Result<Self, Error>
pub fn new<P>( file_path: P, service_id: &str, db_key_id: &str, ) -> Result<Self, Error>
Creates a new encrypted MdkSqliteStorage with automatic key management.
This is the recommended constructor for production use. The database encryption key is automatically retrieved from (or generated and stored in) the platform’s native keyring (Keychain on macOS/iOS, Keystore on Android, etc.).
§Prerequisites
The host application must initialize a platform-specific keyring store before calling this method. See the module documentation for setup instructions.
§Arguments
file_path- Path to the SQLite database file.service_id- A stable, host-defined application identifier (e.g., reverse-DNS like"com.example.myapp"). This should be unique per application.db_key_id- A stable identifier for this database’s key (e.g.,"mdk.db.key.default"or"mdk.db.key.<profile_id>"for multi-profile apps).
§Key Management
- If no key exists for the given identifiers, a new 32-byte key is generated using cryptographically secure randomness and stored in the keyring.
- On subsequent calls with the same identifiers, the existing key is retrieved.
§Errors
Returns an error if:
- No keyring store has been initialized
- The keyring is unavailable or inaccessible
- An existing database cannot be decrypted with the stored key
- The database file cannot be created or opened
§Example
use mdk_sqlite_storage::MdkSqliteStorage;
// First, initialize the platform keyring (do this once at app startup)
// keyring_core::set_default_store(platform_specific_store);
// Then create storage with automatic key management
let storage = MdkSqliteStorage::new(
"/path/to/db.sqlite",
"com.example.myapp",
"mdk.db.key.default"
)?;Sourcepub fn new_with_key<P>(
file_path: P,
config: EncryptionConfig,
) -> Result<Self, Error>
pub fn new_with_key<P>( file_path: P, config: EncryptionConfig, ) -> Result<Self, Error>
Creates a new encrypted MdkSqliteStorage with a directly provided encryption key.
Use this method when you want to manage encryption keys yourself rather than using
the platform keyring. For most applications, prefer Self::new which handles
key management automatically.
§Arguments
file_path- Path to the SQLite database file.config- Encryption configuration containing the 32-byte key.
§Errors
Returns an error if:
- The encryption key is invalid
- An existing database cannot be decrypted with the provided key
- An existing database was created without encryption
- The database file cannot be created or opened
- File permissions cannot be set
§Example
use mdk_sqlite_storage::{EncryptionConfig, MdkSqliteStorage};
let key = [0u8; 32]; // Your securely stored key
let config = EncryptionConfig::new(key);
let storage = MdkSqliteStorage::new_with_key("/path/to/db.sqlite", config)?;Sourcepub fn new_unencrypted<P>(file_path: P) -> Result<Self, Error>
pub fn new_unencrypted<P>(file_path: P) -> Result<Self, Error>
Creates a new unencrypted MdkSqliteStorage with the provided file path.
⚠️ WARNING: This creates an unencrypted database. Sensitive MLS state including exporter secrets will be stored in plaintext. Only use this for development or testing.
For production use, use Self::new or Self::new_with_key instead.
§Arguments
file_path- Path to the SQLite database file.
§Returns
A Result containing a new instance of MdkSqliteStorage or an error.
§Example
use mdk_sqlite_storage::MdkSqliteStorage;
// ⚠️ Unencrypted - for development only
let storage = MdkSqliteStorage::new_unencrypted("/path/to/db.sqlite")?;Trait Implementations§
Source§impl GroupStorage for MdkSqliteStorage
impl GroupStorage for MdkSqliteStorage
Source§fn all_groups(&self) -> Result<Vec<Group>, GroupError>
fn all_groups(&self) -> Result<Vec<Group>, GroupError>
Source§fn find_group_by_mls_group_id(
&self,
mls_group_id: &GroupId,
) -> Result<Option<Group>, GroupError>
fn find_group_by_mls_group_id( &self, mls_group_id: &GroupId, ) -> Result<Option<Group>, GroupError>
Source§fn find_group_by_nostr_group_id(
&self,
nostr_group_id: &[u8; 32],
) -> Result<Option<Group>, GroupError>
fn find_group_by_nostr_group_id( &self, nostr_group_id: &[u8; 32], ) -> Result<Option<Group>, GroupError>
Source§fn save_group(&self, group: Group) -> Result<(), GroupError>
fn save_group(&self, group: Group) -> Result<(), GroupError>
Source§fn messages(
&self,
mls_group_id: &GroupId,
pagination: Option<Pagination>,
) -> Result<Vec<Message>, GroupError>
fn messages( &self, mls_group_id: &GroupId, pagination: Option<Pagination>, ) -> Result<Vec<Message>, GroupError>
Source§fn last_message(
&self,
mls_group_id: &GroupId,
sort_order: MessageSortOrder,
) -> Result<Option<Message>, GroupError>
fn last_message( &self, mls_group_id: &GroupId, sort_order: MessageSortOrder, ) -> Result<Option<Message>, GroupError>
Source§fn admins(
&self,
mls_group_id: &GroupId,
) -> Result<BTreeSet<PublicKey>, GroupError>
fn admins( &self, mls_group_id: &GroupId, ) -> Result<BTreeSet<PublicKey>, GroupError>
Source§fn group_relays(
&self,
mls_group_id: &GroupId,
) -> Result<BTreeSet<GroupRelay>, GroupError>
fn group_relays( &self, mls_group_id: &GroupId, ) -> Result<BTreeSet<GroupRelay>, GroupError>
Source§fn replace_group_relays(
&self,
group_id: &GroupId,
relays: BTreeSet<RelayUrl>,
) -> Result<(), GroupError>
fn replace_group_relays( &self, group_id: &GroupId, relays: BTreeSet<RelayUrl>, ) -> Result<(), GroupError>
Source§fn get_group_exporter_secret(
&self,
mls_group_id: &GroupId,
epoch: u64,
) -> Result<Option<GroupExporterSecret>, GroupError>
fn get_group_exporter_secret( &self, mls_group_id: &GroupId, epoch: u64, ) -> Result<Option<GroupExporterSecret>, GroupError>
Source§fn save_group_exporter_secret(
&self,
group_exporter_secret: GroupExporterSecret,
) -> Result<(), GroupError>
fn save_group_exporter_secret( &self, group_exporter_secret: GroupExporterSecret, ) -> Result<(), GroupError>
Source§fn get_group_mip04_exporter_secret(
&self,
mls_group_id: &GroupId,
epoch: u64,
) -> Result<Option<GroupExporterSecret>, GroupError>
fn get_group_mip04_exporter_secret( &self, mls_group_id: &GroupId, epoch: u64, ) -> Result<Option<GroupExporterSecret>, GroupError>
Source§fn save_group_mip04_exporter_secret(
&self,
group_exporter_secret: GroupExporterSecret,
) -> Result<(), GroupError>
fn save_group_mip04_exporter_secret( &self, group_exporter_secret: GroupExporterSecret, ) -> Result<(), GroupError>
Source§fn prune_group_exporter_secrets_before_epoch(
&self,
group_id: &GroupId,
min_epoch_to_keep: u64,
) -> Result<(), GroupError>
fn prune_group_exporter_secrets_before_epoch( &self, group_id: &GroupId, min_epoch_to_keep: u64, ) -> Result<(), GroupError>
min_epoch_to_keep for the group. Read moreSource§fn groups_needing_self_update(
&self,
threshold_secs: u64,
) -> Result<Vec<GroupId>, GroupError>
fn groups_needing_self_update( &self, threshold_secs: u64, ) -> Result<Vec<GroupId>, GroupError>
self_update_state is SelfUpdateState::Required (post-join
requirement per MIP-02) or because the last self-update is older than
threshold_secs seconds ago (periodic rotation per MIP-00).Source§impl MdkStorageProvider for MdkSqliteStorage
Implementation of MdkStorageProvider for SQLite-based storage.
impl MdkStorageProvider for MdkSqliteStorage
Implementation of MdkStorageProvider for SQLite-based storage.
Source§fn backend(&self) -> Backend
fn backend(&self) -> Backend
Returns the backend type.
§Returns
Backend::SQLite indicating this is a SQLite-based storage implementation.
Source§fn create_group_snapshot(
&self,
group_id: &GroupId,
name: &str,
) -> Result<(), MdkStorageError>
fn create_group_snapshot( &self, group_id: &GroupId, name: &str, ) -> Result<(), MdkStorageError>
Source§fn rollback_group_to_snapshot(
&self,
group_id: &GroupId,
name: &str,
) -> Result<(), MdkStorageError>
fn rollback_group_to_snapshot( &self, group_id: &GroupId, name: &str, ) -> Result<(), MdkStorageError>
Source§fn release_group_snapshot(
&self,
group_id: &GroupId,
name: &str,
) -> Result<(), MdkStorageError>
fn release_group_snapshot( &self, group_id: &GroupId, name: &str, ) -> Result<(), MdkStorageError>
Source§fn list_group_snapshots(
&self,
group_id: &GroupId,
) -> Result<Vec<(String, u64)>, MdkStorageError>
fn list_group_snapshots( &self, group_id: &GroupId, ) -> Result<Vec<(String, u64)>, MdkStorageError>
Source§fn prune_expired_snapshots(
&self,
min_timestamp: u64,
) -> Result<usize, MdkStorageError>
fn prune_expired_snapshots( &self, min_timestamp: u64, ) -> Result<usize, MdkStorageError>
Source§impl MessageStorage for MdkSqliteStorage
impl MessageStorage for MdkSqliteStorage
Source§fn save_message(&self, message: Message) -> Result<(), MessageError>
fn save_message(&self, message: Message) -> Result<(), MessageError>
Source§fn find_message_by_event_id(
&self,
mls_group_id: &GroupId,
event_id: &EventId,
) -> Result<Option<Message>, MessageError>
fn find_message_by_event_id( &self, mls_group_id: &GroupId, event_id: &EventId, ) -> Result<Option<Message>, MessageError>
Source§fn save_processed_message(
&self,
processed_message: ProcessedMessage,
) -> Result<(), MessageError>
fn save_processed_message( &self, processed_message: ProcessedMessage, ) -> Result<(), MessageError>
Source§fn find_processed_message_by_event_id(
&self,
event_id: &EventId,
) -> Result<Option<ProcessedMessage>, MessageError>
fn find_processed_message_by_event_id( &self, event_id: &EventId, ) -> Result<Option<ProcessedMessage>, MessageError>
Source§fn invalidate_messages_after_epoch(
&self,
group_id: &GroupId,
epoch: u64,
) -> Result<Vec<EventId>, MessageError>
fn invalidate_messages_after_epoch( &self, group_id: &GroupId, epoch: u64, ) -> Result<Vec<EventId>, MessageError>
Source§fn invalidate_processed_messages_after_epoch(
&self,
group_id: &GroupId,
epoch: u64,
) -> Result<Vec<EventId>, MessageError>
fn invalidate_processed_messages_after_epoch( &self, group_id: &GroupId, epoch: u64, ) -> Result<Vec<EventId>, MessageError>
Source§fn find_invalidated_messages(
&self,
group_id: &GroupId,
) -> Result<Vec<Message>, MessageError>
fn find_invalidated_messages( &self, group_id: &GroupId, ) -> Result<Vec<Message>, MessageError>
Source§fn find_invalidated_processed_messages(
&self,
group_id: &GroupId,
) -> Result<Vec<ProcessedMessage>, MessageError>
fn find_invalidated_processed_messages( &self, group_id: &GroupId, ) -> Result<Vec<ProcessedMessage>, MessageError>
Source§fn find_failed_messages_for_retry(
&self,
group_id: &GroupId,
) -> Result<Vec<EventId>, MessageError>
fn find_failed_messages_for_retry( &self, group_id: &GroupId, ) -> Result<Vec<EventId>, MessageError>
Source§fn mark_processed_message_retryable(
&self,
event_id: &EventId,
) -> Result<(), MessageError>
fn mark_processed_message_retryable( &self, event_id: &EventId, ) -> Result<(), MessageError>
Source§fn find_message_epoch_by_tag_content(
&self,
group_id: &GroupId,
content_substring: &str,
) -> Result<Option<u64>, MessageError>
fn find_message_epoch_by_tag_content( &self, group_id: &GroupId, content_substring: &str, ) -> Result<Option<u64>, MessageError>
Source§impl StorageProvider<STORAGE_PROVIDER_VERSION> for MdkSqliteStorage
impl StorageProvider<STORAGE_PROVIDER_VERSION> for MdkSqliteStorage
Source§type Error = MdkStorageError
type Error = MdkStorageError
Source§fn write_mls_join_config<GroupId, MlsGroupJoinConfig>(
&self,
group_id: &GroupId,
config: &MlsGroupJoinConfig,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
MlsGroupJoinConfig: MlsGroupJoinConfig<STORAGE_PROVIDER_VERSION>,
fn write_mls_join_config<GroupId, MlsGroupJoinConfig>(
&self,
group_id: &GroupId,
config: &MlsGroupJoinConfig,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
MlsGroupJoinConfig: MlsGroupJoinConfig<STORAGE_PROVIDER_VERSION>,
Source§fn append_own_leaf_node<GroupId, LeafNode>(
&self,
group_id: &GroupId,
leaf_node: &LeafNode,
) -> Result<(), Self::Error>
fn append_own_leaf_node<GroupId, LeafNode>( &self, group_id: &GroupId, leaf_node: &LeafNode, ) -> Result<(), Self::Error>
Source§fn queue_proposal<GroupId, ProposalRef, QueuedProposal>(
&self,
group_id: &GroupId,
proposal_ref: &ProposalRef,
proposal: &QueuedProposal,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ProposalRef: ProposalRef<STORAGE_PROVIDER_VERSION>,
QueuedProposal: QueuedProposal<STORAGE_PROVIDER_VERSION>,
fn queue_proposal<GroupId, ProposalRef, QueuedProposal>(
&self,
group_id: &GroupId,
proposal_ref: &ProposalRef,
proposal: &QueuedProposal,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ProposalRef: ProposalRef<STORAGE_PROVIDER_VERSION>,
QueuedProposal: QueuedProposal<STORAGE_PROVIDER_VERSION>,
Source§fn write_tree<GroupId, TreeSync>(
&self,
group_id: &GroupId,
tree: &TreeSync,
) -> Result<(), Self::Error>
fn write_tree<GroupId, TreeSync>( &self, group_id: &GroupId, tree: &TreeSync, ) -> Result<(), Self::Error>
Source§fn write_interim_transcript_hash<GroupId, InterimTranscriptHash>(
&self,
group_id: &GroupId,
interim_transcript_hash: &InterimTranscriptHash,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
InterimTranscriptHash: InterimTranscriptHash<STORAGE_PROVIDER_VERSION>,
fn write_interim_transcript_hash<GroupId, InterimTranscriptHash>(
&self,
group_id: &GroupId,
interim_transcript_hash: &InterimTranscriptHash,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
InterimTranscriptHash: InterimTranscriptHash<STORAGE_PROVIDER_VERSION>,
Source§fn write_context<GroupId, GroupContext>(
&self,
group_id: &GroupId,
group_context: &GroupContext,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
GroupContext: GroupContext<STORAGE_PROVIDER_VERSION>,
fn write_context<GroupId, GroupContext>(
&self,
group_id: &GroupId,
group_context: &GroupContext,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
GroupContext: GroupContext<STORAGE_PROVIDER_VERSION>,
Source§fn write_confirmation_tag<GroupId, ConfirmationTag>(
&self,
group_id: &GroupId,
confirmation_tag: &ConfirmationTag,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ConfirmationTag: ConfirmationTag<STORAGE_PROVIDER_VERSION>,
fn write_confirmation_tag<GroupId, ConfirmationTag>(
&self,
group_id: &GroupId,
confirmation_tag: &ConfirmationTag,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ConfirmationTag: ConfirmationTag<STORAGE_PROVIDER_VERSION>,
Source§fn write_group_state<GroupState, GroupId>(
&self,
group_id: &GroupId,
group_state: &GroupState,
) -> Result<(), Self::Error>where
GroupState: GroupState<STORAGE_PROVIDER_VERSION>,
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn write_group_state<GroupState, GroupId>(
&self,
group_id: &GroupId,
group_state: &GroupState,
) -> Result<(), Self::Error>where
GroupState: GroupState<STORAGE_PROVIDER_VERSION>,
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
Source§fn write_message_secrets<GroupId, MessageSecrets>(
&self,
group_id: &GroupId,
message_secrets: &MessageSecrets,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
MessageSecrets: MessageSecrets<STORAGE_PROVIDER_VERSION>,
fn write_message_secrets<GroupId, MessageSecrets>(
&self,
group_id: &GroupId,
message_secrets: &MessageSecrets,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
MessageSecrets: MessageSecrets<STORAGE_PROVIDER_VERSION>,
Source§fn write_resumption_psk_store<GroupId, ResumptionPskStore>(
&self,
group_id: &GroupId,
resumption_psk_store: &ResumptionPskStore,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ResumptionPskStore: ResumptionPskStore<STORAGE_PROVIDER_VERSION>,
fn write_resumption_psk_store<GroupId, ResumptionPskStore>(
&self,
group_id: &GroupId,
resumption_psk_store: &ResumptionPskStore,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ResumptionPskStore: ResumptionPskStore<STORAGE_PROVIDER_VERSION>,
Source§fn write_own_leaf_index<GroupId, LeafNodeIndex>(
&self,
group_id: &GroupId,
own_leaf_index: &LeafNodeIndex,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
LeafNodeIndex: LeafNodeIndex<STORAGE_PROVIDER_VERSION>,
fn write_own_leaf_index<GroupId, LeafNodeIndex>(
&self,
group_id: &GroupId,
own_leaf_index: &LeafNodeIndex,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
LeafNodeIndex: LeafNodeIndex<STORAGE_PROVIDER_VERSION>,
Source§fn write_group_epoch_secrets<GroupId, GroupEpochSecrets>(
&self,
group_id: &GroupId,
group_epoch_secrets: &GroupEpochSecrets,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
GroupEpochSecrets: GroupEpochSecrets<STORAGE_PROVIDER_VERSION>,
fn write_group_epoch_secrets<GroupId, GroupEpochSecrets>(
&self,
group_id: &GroupId,
group_epoch_secrets: &GroupEpochSecrets,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
GroupEpochSecrets: GroupEpochSecrets<STORAGE_PROVIDER_VERSION>,
Source§fn write_signature_key_pair<SignaturePublicKey, SignatureKeyPair>(
&self,
public_key: &SignaturePublicKey,
signature_key_pair: &SignatureKeyPair,
) -> Result<(), Self::Error>where
SignaturePublicKey: SignaturePublicKey<STORAGE_PROVIDER_VERSION>,
SignatureKeyPair: SignatureKeyPair<STORAGE_PROVIDER_VERSION>,
fn write_signature_key_pair<SignaturePublicKey, SignatureKeyPair>(
&self,
public_key: &SignaturePublicKey,
signature_key_pair: &SignatureKeyPair,
) -> Result<(), Self::Error>where
SignaturePublicKey: SignaturePublicKey<STORAGE_PROVIDER_VERSION>,
SignatureKeyPair: SignatureKeyPair<STORAGE_PROVIDER_VERSION>,
Source§fn write_encryption_key_pair<EncryptionKey, HpkeKeyPair>(
&self,
public_key: &EncryptionKey,
key_pair: &HpkeKeyPair,
) -> Result<(), Self::Error>where
EncryptionKey: EncryptionKey<STORAGE_PROVIDER_VERSION>,
HpkeKeyPair: HpkeKeyPair<STORAGE_PROVIDER_VERSION>,
fn write_encryption_key_pair<EncryptionKey, HpkeKeyPair>(
&self,
public_key: &EncryptionKey,
key_pair: &HpkeKeyPair,
) -> Result<(), Self::Error>where
EncryptionKey: EncryptionKey<STORAGE_PROVIDER_VERSION>,
HpkeKeyPair: HpkeKeyPair<STORAGE_PROVIDER_VERSION>,
Source§fn write_encryption_epoch_key_pairs<GroupId, EpochKey, HpkeKeyPair>(
&self,
group_id: &GroupId,
epoch: &EpochKey,
leaf_index: u32,
key_pairs: &[HpkeKeyPair],
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
EpochKey: EpochKey<STORAGE_PROVIDER_VERSION>,
HpkeKeyPair: HpkeKeyPair<STORAGE_PROVIDER_VERSION>,
fn write_encryption_epoch_key_pairs<GroupId, EpochKey, HpkeKeyPair>(
&self,
group_id: &GroupId,
epoch: &EpochKey,
leaf_index: u32,
key_pairs: &[HpkeKeyPair],
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
EpochKey: EpochKey<STORAGE_PROVIDER_VERSION>,
HpkeKeyPair: HpkeKeyPair<STORAGE_PROVIDER_VERSION>,
Source§fn write_key_package<HashReference, KeyPackage>(
&self,
hash_ref: &HashReference,
key_package: &KeyPackage,
) -> Result<(), Self::Error>where
HashReference: HashReference<STORAGE_PROVIDER_VERSION>,
KeyPackage: KeyPackage<STORAGE_PROVIDER_VERSION>,
fn write_key_package<HashReference, KeyPackage>(
&self,
hash_ref: &HashReference,
key_package: &KeyPackage,
) -> Result<(), Self::Error>where
HashReference: HashReference<STORAGE_PROVIDER_VERSION>,
KeyPackage: KeyPackage<STORAGE_PROVIDER_VERSION>,
Source§fn write_psk<PskId, PskBundle>(
&self,
psk_id: &PskId,
psk: &PskBundle,
) -> Result<(), Self::Error>
fn write_psk<PskId, PskBundle>( &self, psk_id: &PskId, psk: &PskBundle, ) -> Result<(), Self::Error>
Source§fn mls_group_join_config<GroupId, MlsGroupJoinConfig>(
&self,
group_id: &GroupId,
) -> Result<Option<MlsGroupJoinConfig>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
MlsGroupJoinConfig: MlsGroupJoinConfig<STORAGE_PROVIDER_VERSION>,
fn mls_group_join_config<GroupId, MlsGroupJoinConfig>(
&self,
group_id: &GroupId,
) -> Result<Option<MlsGroupJoinConfig>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
MlsGroupJoinConfig: MlsGroupJoinConfig<STORAGE_PROVIDER_VERSION>,
Source§fn own_leaf_nodes<GroupId, LeafNode>(
&self,
group_id: &GroupId,
) -> Result<Vec<LeafNode>, Self::Error>
fn own_leaf_nodes<GroupId, LeafNode>( &self, group_id: &GroupId, ) -> Result<Vec<LeafNode>, Self::Error>
Source§fn queued_proposal_refs<GroupId, ProposalRef>(
&self,
group_id: &GroupId,
) -> Result<Vec<ProposalRef>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ProposalRef: ProposalRef<STORAGE_PROVIDER_VERSION>,
fn queued_proposal_refs<GroupId, ProposalRef>(
&self,
group_id: &GroupId,
) -> Result<Vec<ProposalRef>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ProposalRef: ProposalRef<STORAGE_PROVIDER_VERSION>,
group_id, or an empty vector of none are stored.Source§fn queued_proposals<GroupId, ProposalRef, QueuedProposal>(
&self,
group_id: &GroupId,
) -> Result<Vec<(ProposalRef, QueuedProposal)>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ProposalRef: ProposalRef<STORAGE_PROVIDER_VERSION>,
QueuedProposal: QueuedProposal<STORAGE_PROVIDER_VERSION>,
fn queued_proposals<GroupId, ProposalRef, QueuedProposal>(
&self,
group_id: &GroupId,
) -> Result<Vec<(ProposalRef, QueuedProposal)>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ProposalRef: ProposalRef<STORAGE_PROVIDER_VERSION>,
QueuedProposal: QueuedProposal<STORAGE_PROVIDER_VERSION>,
group_id, or an empty vector of none are stored.Source§fn tree<GroupId, TreeSync>(
&self,
group_id: &GroupId,
) -> Result<Option<TreeSync>, Self::Error>
fn tree<GroupId, TreeSync>( &self, group_id: &GroupId, ) -> Result<Option<TreeSync>, Self::Error>
group_id.Source§fn group_context<GroupId, GroupContext>(
&self,
group_id: &GroupId,
) -> Result<Option<GroupContext>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
GroupContext: GroupContext<STORAGE_PROVIDER_VERSION>,
fn group_context<GroupId, GroupContext>(
&self,
group_id: &GroupId,
) -> Result<Option<GroupContext>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
GroupContext: GroupContext<STORAGE_PROVIDER_VERSION>,
group_id.Source§fn interim_transcript_hash<GroupId, InterimTranscriptHash>(
&self,
group_id: &GroupId,
) -> Result<Option<InterimTranscriptHash>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
InterimTranscriptHash: InterimTranscriptHash<STORAGE_PROVIDER_VERSION>,
fn interim_transcript_hash<GroupId, InterimTranscriptHash>(
&self,
group_id: &GroupId,
) -> Result<Option<InterimTranscriptHash>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
InterimTranscriptHash: InterimTranscriptHash<STORAGE_PROVIDER_VERSION>,
group_id.Source§fn confirmation_tag<GroupId, ConfirmationTag>(
&self,
group_id: &GroupId,
) -> Result<Option<ConfirmationTag>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ConfirmationTag: ConfirmationTag<STORAGE_PROVIDER_VERSION>,
fn confirmation_tag<GroupId, ConfirmationTag>(
&self,
group_id: &GroupId,
) -> Result<Option<ConfirmationTag>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ConfirmationTag: ConfirmationTag<STORAGE_PROVIDER_VERSION>,
group_id.Source§fn group_state<GroupState, GroupId>(
&self,
group_id: &GroupId,
) -> Result<Option<GroupState>, Self::Error>where
GroupState: GroupState<STORAGE_PROVIDER_VERSION>,
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn group_state<GroupState, GroupId>(
&self,
group_id: &GroupId,
) -> Result<Option<GroupState>, Self::Error>where
GroupState: GroupState<STORAGE_PROVIDER_VERSION>,
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
group_id.Source§fn message_secrets<GroupId, MessageSecrets>(
&self,
group_id: &GroupId,
) -> Result<Option<MessageSecrets>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
MessageSecrets: MessageSecrets<STORAGE_PROVIDER_VERSION>,
fn message_secrets<GroupId, MessageSecrets>(
&self,
group_id: &GroupId,
) -> Result<Option<MessageSecrets>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
MessageSecrets: MessageSecrets<STORAGE_PROVIDER_VERSION>,
Source§fn resumption_psk_store<GroupId, ResumptionPskStore>(
&self,
group_id: &GroupId,
) -> Result<Option<ResumptionPskStore>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ResumptionPskStore: ResumptionPskStore<STORAGE_PROVIDER_VERSION>,
fn resumption_psk_store<GroupId, ResumptionPskStore>(
&self,
group_id: &GroupId,
) -> Result<Option<ResumptionPskStore>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ResumptionPskStore: ResumptionPskStore<STORAGE_PROVIDER_VERSION>,
Source§fn own_leaf_index<GroupId, LeafNodeIndex>(
&self,
group_id: &GroupId,
) -> Result<Option<LeafNodeIndex>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
LeafNodeIndex: LeafNodeIndex<STORAGE_PROVIDER_VERSION>,
fn own_leaf_index<GroupId, LeafNodeIndex>(
&self,
group_id: &GroupId,
) -> Result<Option<LeafNodeIndex>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
LeafNodeIndex: LeafNodeIndex<STORAGE_PROVIDER_VERSION>,
Source§fn group_epoch_secrets<GroupId, GroupEpochSecrets>(
&self,
group_id: &GroupId,
) -> Result<Option<GroupEpochSecrets>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
GroupEpochSecrets: GroupEpochSecrets<STORAGE_PROVIDER_VERSION>,
fn group_epoch_secrets<GroupId, GroupEpochSecrets>(
&self,
group_id: &GroupId,
) -> Result<Option<GroupEpochSecrets>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
GroupEpochSecrets: GroupEpochSecrets<STORAGE_PROVIDER_VERSION>,
Source§fn signature_key_pair<SignaturePublicKey, SignatureKeyPair>(
&self,
public_key: &SignaturePublicKey,
) -> Result<Option<SignatureKeyPair>, Self::Error>where
SignaturePublicKey: SignaturePublicKey<STORAGE_PROVIDER_VERSION>,
SignatureKeyPair: SignatureKeyPair<STORAGE_PROVIDER_VERSION>,
fn signature_key_pair<SignaturePublicKey, SignatureKeyPair>(
&self,
public_key: &SignaturePublicKey,
) -> Result<Option<SignatureKeyPair>, Self::Error>where
SignaturePublicKey: SignaturePublicKey<STORAGE_PROVIDER_VERSION>,
SignatureKeyPair: SignatureKeyPair<STORAGE_PROVIDER_VERSION>,
Source§fn encryption_key_pair<HpkeKeyPair, EncryptionKey>(
&self,
public_key: &EncryptionKey,
) -> Result<Option<HpkeKeyPair>, Self::Error>where
HpkeKeyPair: HpkeKeyPair<STORAGE_PROVIDER_VERSION>,
EncryptionKey: EncryptionKey<STORAGE_PROVIDER_VERSION>,
fn encryption_key_pair<HpkeKeyPair, EncryptionKey>(
&self,
public_key: &EncryptionKey,
) -> Result<Option<HpkeKeyPair>, Self::Error>where
HpkeKeyPair: HpkeKeyPair<STORAGE_PROVIDER_VERSION>,
EncryptionKey: EncryptionKey<STORAGE_PROVIDER_VERSION>,
Source§fn encryption_epoch_key_pairs<GroupId, EpochKey, HpkeKeyPair>(
&self,
group_id: &GroupId,
epoch: &EpochKey,
leaf_index: u32,
) -> Result<Vec<HpkeKeyPair>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
EpochKey: EpochKey<STORAGE_PROVIDER_VERSION>,
HpkeKeyPair: HpkeKeyPair<STORAGE_PROVIDER_VERSION>,
fn encryption_epoch_key_pairs<GroupId, EpochKey, HpkeKeyPair>(
&self,
group_id: &GroupId,
epoch: &EpochKey,
leaf_index: u32,
) -> Result<Vec<HpkeKeyPair>, Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
EpochKey: EpochKey<STORAGE_PROVIDER_VERSION>,
HpkeKeyPair: HpkeKeyPair<STORAGE_PROVIDER_VERSION>,
Source§fn key_package<HashReference, KeyPackage>(
&self,
hash_ref: &HashReference,
) -> Result<Option<KeyPackage>, Self::Error>where
HashReference: HashReference<STORAGE_PROVIDER_VERSION>,
KeyPackage: KeyPackage<STORAGE_PROVIDER_VERSION>,
fn key_package<HashReference, KeyPackage>(
&self,
hash_ref: &HashReference,
) -> Result<Option<KeyPackage>, Self::Error>where
HashReference: HashReference<STORAGE_PROVIDER_VERSION>,
KeyPackage: KeyPackage<STORAGE_PROVIDER_VERSION>,
Source§fn psk<PskBundle, PskId>(
&self,
psk_id: &PskId,
) -> Result<Option<PskBundle>, Self::Error>
fn psk<PskBundle, PskId>( &self, psk_id: &PskId, ) -> Result<Option<PskBundle>, Self::Error>
Source§fn remove_proposal<GroupId, ProposalRef>(
&self,
group_id: &GroupId,
proposal_ref: &ProposalRef,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ProposalRef: ProposalRef<STORAGE_PROVIDER_VERSION>,
fn remove_proposal<GroupId, ProposalRef>(
&self,
group_id: &GroupId,
proposal_ref: &ProposalRef,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ProposalRef: ProposalRef<STORAGE_PROVIDER_VERSION>,
Source§fn delete_own_leaf_nodes<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn delete_own_leaf_nodes<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
Source§fn delete_group_config<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn delete_group_config<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
Source§fn delete_tree<GroupId>(&self, group_id: &GroupId) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn delete_tree<GroupId>(&self, group_id: &GroupId) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
Source§fn delete_confirmation_tag<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn delete_confirmation_tag<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
Source§fn delete_group_state<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn delete_group_state<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
Source§fn delete_context<GroupId>(&self, group_id: &GroupId) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn delete_context<GroupId>(&self, group_id: &GroupId) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
Source§fn delete_interim_transcript_hash<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn delete_interim_transcript_hash<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
Source§fn delete_message_secrets<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn delete_message_secrets<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
Source§fn delete_all_resumption_psk_secrets<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn delete_all_resumption_psk_secrets<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
Source§fn delete_own_leaf_index<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn delete_own_leaf_index<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
Source§fn delete_group_epoch_secrets<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
fn delete_group_epoch_secrets<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
Source§fn clear_proposal_queue<GroupId, ProposalRef>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ProposalRef: ProposalRef<STORAGE_PROVIDER_VERSION>,
fn clear_proposal_queue<GroupId, ProposalRef>(
&self,
group_id: &GroupId,
) -> Result<(), Self::Error>where
GroupId: GroupId<STORAGE_PROVIDER_VERSION>,
ProposalRef: ProposalRef<STORAGE_PROVIDER_VERSION>,
Source§fn delete_signature_key_pair<SignaturePublicKey>(
&self,
public_key: &SignaturePublicKey,
) -> Result<(), Self::Error>where
SignaturePublicKey: SignaturePublicKey<STORAGE_PROVIDER_VERSION>,
fn delete_signature_key_pair<SignaturePublicKey>(
&self,
public_key: &SignaturePublicKey,
) -> Result<(), Self::Error>where
SignaturePublicKey: SignaturePublicKey<STORAGE_PROVIDER_VERSION>,
Source§fn delete_encryption_key_pair<EncryptionKey>(
&self,
public_key: &EncryptionKey,
) -> Result<(), Self::Error>where
EncryptionKey: EncryptionKey<STORAGE_PROVIDER_VERSION>,
fn delete_encryption_key_pair<EncryptionKey>(
&self,
public_key: &EncryptionKey,
) -> Result<(), Self::Error>where
EncryptionKey: EncryptionKey<STORAGE_PROVIDER_VERSION>,
Source§fn delete_encryption_epoch_key_pairs<GroupId, EpochKey>(
&self,
group_id: &GroupId,
epoch: &EpochKey,
leaf_index: u32,
) -> Result<(), Self::Error>
fn delete_encryption_epoch_key_pairs<GroupId, EpochKey>( &self, group_id: &GroupId, epoch: &EpochKey, leaf_index: u32, ) -> Result<(), Self::Error>
Source§fn delete_key_package<HashReference>(
&self,
hash_ref: &HashReference,
) -> Result<(), Self::Error>where
HashReference: HashReference<STORAGE_PROVIDER_VERSION>,
fn delete_key_package<HashReference>(
&self,
hash_ref: &HashReference,
) -> Result<(), Self::Error>where
HashReference: HashReference<STORAGE_PROVIDER_VERSION>,
Source§impl WelcomeStorage for MdkSqliteStorage
impl WelcomeStorage for MdkSqliteStorage
Source§fn save_welcome(&self, welcome: Welcome) -> Result<(), WelcomeError>
fn save_welcome(&self, welcome: Welcome) -> Result<(), WelcomeError>
Source§fn find_welcome_by_event_id(
&self,
event_id: &EventId,
) -> Result<Option<Welcome>, WelcomeError>
fn find_welcome_by_event_id( &self, event_id: &EventId, ) -> Result<Option<Welcome>, WelcomeError>
Source§fn pending_welcomes(
&self,
pagination: Option<Pagination>,
) -> Result<Vec<Welcome>, WelcomeError>
fn pending_welcomes( &self, pagination: Option<Pagination>, ) -> Result<Vec<Welcome>, WelcomeError>
Source§fn save_processed_welcome(
&self,
processed_welcome: ProcessedWelcome,
) -> Result<(), WelcomeError>
fn save_processed_welcome( &self, processed_welcome: ProcessedWelcome, ) -> Result<(), WelcomeError>
Source§fn find_processed_welcome_by_event_id(
&self,
event_id: &EventId,
) -> Result<Option<ProcessedWelcome>, WelcomeError>
fn find_processed_welcome_by_event_id( &self, event_id: &EventId, ) -> Result<Option<ProcessedWelcome>, WelcomeError>
Auto Trait Implementations§
impl Freeze for MdkSqliteStorage
impl RefUnwindSafe for MdkSqliteStorage
impl Send for MdkSqliteStorage
impl Sync for MdkSqliteStorage
impl Unpin for MdkSqliteStorage
impl UnsafeUnpin for MdkSqliteStorage
impl UnwindSafe for MdkSqliteStorage
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T, const VERSION: u16> PublicStorageProvider<VERSION> for Twhere
T: StorageProvider<VERSION>,
impl<T, const VERSION: u16> PublicStorageProvider<VERSION> for Twhere
T: StorageProvider<VERSION>,
Source§type PublicError = <T as StorageProvider<VERSION>>::Error
type PublicError = <T as StorageProvider<VERSION>>::Error
Source§fn write_tree<GroupId, TreeSync>(
&self,
group_id: &GroupId,
tree: &TreeSync,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>
fn write_tree<GroupId, TreeSync>( &self, group_id: &GroupId, tree: &TreeSync, ) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>
Source§fn write_interim_transcript_hash<GroupId, InterimTranscriptHash>(
&self,
group_id: &GroupId,
interim_transcript_hash: &InterimTranscriptHash,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
InterimTranscriptHash: InterimTranscriptHash<VERSION>,
fn write_interim_transcript_hash<GroupId, InterimTranscriptHash>(
&self,
group_id: &GroupId,
interim_transcript_hash: &InterimTranscriptHash,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
InterimTranscriptHash: InterimTranscriptHash<VERSION>,
Source§fn write_context<GroupId, GroupContext>(
&self,
group_id: &GroupId,
group_context: &GroupContext,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
GroupContext: GroupContext<VERSION>,
fn write_context<GroupId, GroupContext>(
&self,
group_id: &GroupId,
group_context: &GroupContext,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
GroupContext: GroupContext<VERSION>,
Source§fn write_confirmation_tag<GroupId, ConfirmationTag>(
&self,
group_id: &GroupId,
confirmation_tag: &ConfirmationTag,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
ConfirmationTag: ConfirmationTag<VERSION>,
fn write_confirmation_tag<GroupId, ConfirmationTag>(
&self,
group_id: &GroupId,
confirmation_tag: &ConfirmationTag,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
ConfirmationTag: ConfirmationTag<VERSION>,
Source§fn queue_proposal<GroupId, ProposalRef, QueuedProposal>(
&self,
group_id: &GroupId,
proposal_ref: &ProposalRef,
proposal: &QueuedProposal,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
ProposalRef: ProposalRef<VERSION>,
QueuedProposal: QueuedProposal<VERSION>,
fn queue_proposal<GroupId, ProposalRef, QueuedProposal>(
&self,
group_id: &GroupId,
proposal_ref: &ProposalRef,
proposal: &QueuedProposal,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
ProposalRef: ProposalRef<VERSION>,
QueuedProposal: QueuedProposal<VERSION>,
Source§fn queued_proposals<GroupId, ProposalRef, QueuedProposal>(
&self,
group_id: &GroupId,
) -> Result<Vec<(ProposalRef, QueuedProposal)>, <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
ProposalRef: ProposalRef<VERSION>,
QueuedProposal: QueuedProposal<VERSION>,
fn queued_proposals<GroupId, ProposalRef, QueuedProposal>(
&self,
group_id: &GroupId,
) -> Result<Vec<(ProposalRef, QueuedProposal)>, <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
ProposalRef: ProposalRef<VERSION>,
QueuedProposal: QueuedProposal<VERSION>,
group_id, or an empty vector of none are stored.Source§fn tree<GroupId, TreeSync>(
&self,
group_id: &GroupId,
) -> Result<Option<TreeSync>, <T as PublicStorageProvider<VERSION>>::PublicError>
fn tree<GroupId, TreeSync>( &self, group_id: &GroupId, ) -> Result<Option<TreeSync>, <T as PublicStorageProvider<VERSION>>::PublicError>
group_id.Source§fn group_context<GroupId, GroupContext>(
&self,
group_id: &GroupId,
) -> Result<Option<GroupContext>, <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
GroupContext: GroupContext<VERSION>,
fn group_context<GroupId, GroupContext>(
&self,
group_id: &GroupId,
) -> Result<Option<GroupContext>, <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
GroupContext: GroupContext<VERSION>,
group_id.Source§fn interim_transcript_hash<GroupId, InterimTranscriptHash>(
&self,
group_id: &GroupId,
) -> Result<Option<InterimTranscriptHash>, <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
InterimTranscriptHash: InterimTranscriptHash<VERSION>,
fn interim_transcript_hash<GroupId, InterimTranscriptHash>(
&self,
group_id: &GroupId,
) -> Result<Option<InterimTranscriptHash>, <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
InterimTranscriptHash: InterimTranscriptHash<VERSION>,
group_id.Source§fn confirmation_tag<GroupId, ConfirmationTag>(
&self,
group_id: &GroupId,
) -> Result<Option<ConfirmationTag>, <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
ConfirmationTag: ConfirmationTag<VERSION>,
fn confirmation_tag<GroupId, ConfirmationTag>(
&self,
group_id: &GroupId,
) -> Result<Option<ConfirmationTag>, <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
ConfirmationTag: ConfirmationTag<VERSION>,
group_id.Source§fn delete_tree<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
fn delete_tree<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
Source§fn delete_confirmation_tag<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
fn delete_confirmation_tag<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
Source§fn delete_context<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
fn delete_context<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
Source§fn delete_interim_transcript_hash<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
fn delete_interim_transcript_hash<GroupId>(
&self,
group_id: &GroupId,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
Source§fn remove_proposal<GroupId, ProposalRef>(
&self,
group_id: &GroupId,
proposal_ref: &ProposalRef,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
ProposalRef: ProposalRef<VERSION>,
fn remove_proposal<GroupId, ProposalRef>(
&self,
group_id: &GroupId,
proposal_ref: &ProposalRef,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
ProposalRef: ProposalRef<VERSION>,
Source§fn clear_proposal_queue<GroupId, ProposalRef>(
&self,
group_id: &GroupId,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
ProposalRef: ProposalRef<VERSION>,
fn clear_proposal_queue<GroupId, ProposalRef>(
&self,
group_id: &GroupId,
) -> Result<(), <T as PublicStorageProvider<VERSION>>::PublicError>where
GroupId: GroupId<VERSION>,
ProposalRef: ProposalRef<VERSION>,
Source§impl<P> PublicStorageProvider for Pwhere
P: PublicStorageProvider<openmls::::storage::{impl#1}::{constant#0}>,
impl<P> PublicStorageProvider for Pwhere
P: PublicStorageProvider<openmls::::storage::{impl#1}::{constant#0}>,
Source§type Error = <P as PublicStorageProvider<openmls::::storage::{impl#1}::{constant#0}>>::PublicError
type Error = <P as PublicStorageProvider<openmls::::storage::{impl#1}::{constant#0}>>::PublicError
PublicError from openmls_traits::storage::PublicStorageProvider.