pub struct MdkMemoryStorage { /* private fields */ }Expand description
A memory-based storage implementation for MDK.
This struct implements both the OpenMLS StorageProvider<1> trait and MDK storage
traits directly, providing unified storage for MLS cryptographic state and
MDK-specific data (groups, messages, welcomes).
§Unified Storage Architecture
This implementation stores all MLS and MDK state in-memory, providing:
- Snapshot/restore operations for rollback scenarios
- Thread-safe access through
RwLockprotected data structures - LRU caching for frequently accessed MDK objects
Concurrency: Snapshot and restore operations are atomic. create_snapshot()
acquires a global read lock and restore_snapshot() acquires a global write lock
on the storage state, ensuring consistency in multi-threaded environments.
§Caching Strategy
This implementation uses an LRU (Least Recently Used) caching mechanism to store
frequently accessed objects in memory for faster retrieval. The caches are protected
by RwLocks to ensure thread safety while allowing concurrent reads.
- Each cache has a configurable size limit (default: 1000 items)
- When a cache reaches its size limit, the least recently used items will be evicted
§Thread Safety
All caches are protected by RwLocks, which allow:
- Multiple concurrent readers (for find/get operations)
- Exclusive writers (for create/save/delete operations)
This approach optimizes for read-heavy workloads while still ensuring data consistency.
§Configurable Validation Limits
You can customize validation limits using ValidationLimits:
use mdk_memory_storage::{MdkMemoryStorage, ValidationLimits};
let limits = ValidationLimits::default()
.with_cache_size(2000)
.with_max_messages_per_group(5000);
let storage = MdkMemoryStorage::with_limits(limits);Implementations§
Source§impl MdkMemoryStorage
impl MdkMemoryStorage
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new MdkMemoryStorage with the default configuration.
§Returns
A new instance of MdkMemoryStorage with the default cache size.
Sourcepub fn with_cache_size(cache_size: NonZeroUsize) -> Self
pub fn with_cache_size(cache_size: NonZeroUsize) -> Self
Sourcepub fn with_limits(limits: ValidationLimits) -> Self
pub fn with_limits(limits: ValidationLimits) -> Self
Sourcepub fn create_snapshot(&self) -> MemoryStorageSnapshot
pub fn create_snapshot(&self) -> MemoryStorageSnapshot
Creates a snapshot of all in-memory state.
This enables rollback functionality similar to SQLite savepoints.
§Concurrency
This operation is atomic. It acquires a global read lock on the storage state, ensuring a consistent snapshot even in multi-threaded environments.
§Returns
A MemoryStorageSnapshot containing cloned copies of all state.
Sourcepub fn restore_snapshot(&self, snapshot: MemoryStorageSnapshot)
pub fn restore_snapshot(&self, snapshot: MemoryStorageSnapshot)
Restores state from a previously created snapshot.
This replaces all current in-memory state with the state from the snapshot.
§Concurrency
This operation is atomic. It acquires a global write lock on the storage state, ensuring that the restore is consistent even in multi-threaded environments.
§Arguments
snapshot- The snapshot to restore from.
Sourcepub fn create_group_scoped_snapshot(
&self,
group_id: &GroupId,
) -> GroupScopedSnapshot
pub fn create_group_scoped_snapshot( &self, group_id: &GroupId, ) -> GroupScopedSnapshot
Creates a snapshot containing only data for a specific group.
This is used by the MdkStorageProvider::create_group_snapshot trait method
to create rollback points that don’t affect other groups. Unlike create_snapshot()
which captures ALL data, this only captures data belonging to the specified group.
§Concurrency
This operation is atomic. It acquires a global read lock on the storage state, ensuring a consistent snapshot even in multi-threaded environments.
§Arguments
group_id- The group to create a snapshot for.
§Returns
A GroupScopedSnapshot containing cloned copies of all state for that group.
Sourcepub fn restore_group_scoped_snapshot(&self, snapshot: GroupScopedSnapshot)
pub fn restore_group_scoped_snapshot(&self, snapshot: GroupScopedSnapshot)
Restores state for a specific group from a previously created group-scoped snapshot.
This replaces all current in-memory state for the specified group with the state from the snapshot, leaving all other groups unaffected.
§Concurrency
This operation is atomic. It acquires a global write lock on the storage state, ensuring that the restore is consistent even in multi-threaded environments.
§Arguments
snapshot- The group-scoped snapshot to restore from.
Sourcepub fn limits(&self) -> &ValidationLimits
pub fn limits(&self) -> &ValidationLimits
Returns the current validation limits.
Trait Implementations§
Source§impl Debug for MdkMemoryStorage
impl Debug for MdkMemoryStorage
Source§impl Default for MdkMemoryStorage
impl Default for MdkMemoryStorage
Source§impl GroupStorage for MdkMemoryStorage
impl GroupStorage for MdkMemoryStorage
Source§fn save_group(&self, group: Group) -> Result<(), GroupError>
fn save_group(&self, group: Group) -> Result<(), GroupError>
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 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 MdkMemoryStorage
Implementation of MdkStorageProvider for memory-based storage.
impl MdkStorageProvider for MdkMemoryStorage
Implementation of MdkStorageProvider for memory-based storage.
Source§fn backend(&self) -> Backend
fn backend(&self) -> Backend
Returns the backend type.
§Returns
Backend::Memory indicating this is a memory-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 MdkMemoryStorage
impl MessageStorage for MdkMemoryStorage
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 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 save_processed_message(
&self,
processed_message: ProcessedMessage,
) -> Result<(), MessageError>
fn save_processed_message( &self, processed_message: ProcessedMessage, ) -> Result<(), 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 MdkMemoryStorage
impl StorageProvider<STORAGE_PROVIDER_VERSION> for MdkMemoryStorage
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 MdkMemoryStorage
impl WelcomeStorage for MdkMemoryStorage
Source§fn save_welcome(&self, welcome: Welcome) -> Result<(), WelcomeError>
fn save_welcome(&self, welcome: Welcome) -> Result<(), 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 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 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 MdkMemoryStorage
impl !RefUnwindSafe for MdkMemoryStorage
impl Send for MdkMemoryStorage
impl Sync for MdkMemoryStorage
impl Unpin for MdkMemoryStorage
impl UnsafeUnpin for MdkMemoryStorage
impl UnwindSafe for MdkMemoryStorage
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> 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.