use crate::storage::StorageProvider;
pub trait PublicStorageProvider<const VERSION: u16> {
type PublicError: core::fmt::Debug + std::error::Error;
fn version() -> u16 {
VERSION
}
fn write_tree<
GroupId: crate::storage::traits::GroupId<VERSION>,
TreeSync: crate::storage::traits::TreeSync<VERSION>,
>(
&self,
group_id: &GroupId,
tree: &TreeSync,
) -> Result<(), Self::PublicError>;
fn write_interim_transcript_hash<
GroupId: crate::storage::traits::GroupId<VERSION>,
InterimTranscriptHash: crate::storage::traits::InterimTranscriptHash<VERSION>,
>(
&self,
group_id: &GroupId,
interim_transcript_hash: &InterimTranscriptHash,
) -> Result<(), Self::PublicError>;
fn write_context<
GroupId: crate::storage::traits::GroupId<VERSION>,
GroupContext: crate::storage::traits::GroupContext<VERSION>,
>(
&self,
group_id: &GroupId,
group_context: &GroupContext,
) -> Result<(), Self::PublicError>;
fn write_confirmation_tag<
GroupId: crate::storage::traits::GroupId<VERSION>,
ConfirmationTag: crate::storage::traits::ConfirmationTag<VERSION>,
>(
&self,
group_id: &GroupId,
confirmation_tag: &ConfirmationTag,
) -> Result<(), Self::PublicError>;
fn queue_proposal<
GroupId: crate::storage::traits::GroupId<VERSION>,
ProposalRef: crate::storage::traits::ProposalRef<VERSION>,
QueuedProposal: crate::storage::traits::QueuedProposal<VERSION>,
>(
&self,
group_id: &GroupId,
proposal_ref: &ProposalRef,
proposal: &QueuedProposal,
) -> Result<(), Self::PublicError>;
fn queued_proposals<
GroupId: crate::storage::traits::GroupId<VERSION>,
ProposalRef: crate::storage::traits::ProposalRef<VERSION>,
QueuedProposal: crate::storage::traits::QueuedProposal<VERSION>,
>(
&self,
group_id: &GroupId,
) -> Result<Vec<(ProposalRef, QueuedProposal)>, Self::PublicError>;
fn tree<
GroupId: crate::storage::traits::GroupId<VERSION>,
TreeSync: crate::storage::traits::TreeSync<VERSION>,
>(
&self,
group_id: &GroupId,
) -> Result<Option<TreeSync>, Self::PublicError>;
fn group_context<
GroupId: crate::storage::traits::GroupId<VERSION>,
GroupContext: crate::storage::traits::GroupContext<VERSION>,
>(
&self,
group_id: &GroupId,
) -> Result<Option<GroupContext>, Self::PublicError>;
fn interim_transcript_hash<
GroupId: crate::storage::traits::GroupId<VERSION>,
InterimTranscriptHash: crate::storage::traits::InterimTranscriptHash<VERSION>,
>(
&self,
group_id: &GroupId,
) -> Result<Option<InterimTranscriptHash>, Self::PublicError>;
fn confirmation_tag<
GroupId: crate::storage::traits::GroupId<VERSION>,
ConfirmationTag: crate::storage::traits::ConfirmationTag<VERSION>,
>(
&self,
group_id: &GroupId,
) -> Result<Option<ConfirmationTag>, Self::PublicError>;
fn delete_tree<GroupId: crate::storage::traits::GroupId<VERSION>>(
&self,
group_id: &GroupId,
) -> Result<(), Self::PublicError>;
fn delete_confirmation_tag<GroupId: crate::storage::traits::GroupId<VERSION>>(
&self,
group_id: &GroupId,
) -> Result<(), Self::PublicError>;
fn delete_context<GroupId: crate::storage::traits::GroupId<VERSION>>(
&self,
group_id: &GroupId,
) -> Result<(), Self::PublicError>;
fn delete_interim_transcript_hash<GroupId: crate::storage::traits::GroupId<VERSION>>(
&self,
group_id: &GroupId,
) -> Result<(), Self::PublicError>;
fn remove_proposal<
GroupId: crate::storage::traits::GroupId<VERSION>,
ProposalRef: crate::storage::traits::ProposalRef<VERSION>,
>(
&self,
group_id: &GroupId,
proposal_ref: &ProposalRef,
) -> Result<(), Self::PublicError>;
fn clear_proposal_queue<
GroupId: crate::storage::traits::GroupId<VERSION>,
ProposalRef: crate::storage::traits::ProposalRef<VERSION>,
>(
&self,
group_id: &GroupId,
) -> Result<(), Self::PublicError>;
}
impl<T, const VERSION: u16> PublicStorageProvider<VERSION> for T
where
T: StorageProvider<VERSION>,
{
type PublicError = <T as StorageProvider<VERSION>>::Error;
fn write_tree<
GroupId: crate::storage::traits::GroupId<VERSION>,
TreeSync: crate::storage::traits::TreeSync<VERSION>,
>(
&self,
group_id: &GroupId,
tree: &TreeSync,
) -> Result<(), Self::PublicError> {
<Self as StorageProvider<VERSION>>::write_tree(self, group_id, tree)
}
fn write_interim_transcript_hash<
GroupId: crate::storage::traits::GroupId<VERSION>,
InterimTranscriptHash: crate::storage::traits::InterimTranscriptHash<VERSION>,
>(
&self,
group_id: &GroupId,
interim_transcript_hash: &InterimTranscriptHash,
) -> Result<(), Self::PublicError> {
<Self as StorageProvider<VERSION>>::write_interim_transcript_hash(
self,
group_id,
interim_transcript_hash,
)
}
fn write_context<
GroupId: crate::storage::traits::GroupId<VERSION>,
GroupContext: crate::storage::traits::GroupContext<VERSION>,
>(
&self,
group_id: &GroupId,
group_context: &GroupContext,
) -> Result<(), Self::PublicError> {
<Self as StorageProvider<VERSION>>::write_context(self, group_id, group_context)
}
fn write_confirmation_tag<
GroupId: crate::storage::traits::GroupId<VERSION>,
ConfirmationTag: crate::storage::traits::ConfirmationTag<VERSION>,
>(
&self,
group_id: &GroupId,
confirmation_tag: &ConfirmationTag,
) -> Result<(), Self::PublicError> {
<Self as StorageProvider<VERSION>>::write_confirmation_tag(self, group_id, confirmation_tag)
}
fn queue_proposal<
GroupId: crate::storage::traits::GroupId<VERSION>,
ProposalRef: crate::storage::traits::ProposalRef<VERSION>,
QueuedProposal: crate::storage::traits::QueuedProposal<VERSION>,
>(
&self,
group_id: &GroupId,
proposal_ref: &ProposalRef,
proposal: &QueuedProposal,
) -> Result<(), Self::PublicError> {
<Self as StorageProvider<VERSION>>::queue_proposal(self, group_id, proposal_ref, proposal)
}
fn queued_proposals<
GroupId: crate::storage::traits::GroupId<VERSION>,
ProposalRef: crate::storage::traits::ProposalRef<VERSION>,
QueuedProposal: crate::storage::traits::QueuedProposal<VERSION>,
>(
&self,
group_id: &GroupId,
) -> Result<Vec<(ProposalRef, QueuedProposal)>, Self::PublicError> {
<Self as StorageProvider<VERSION>>::queued_proposals(self, group_id)
}
fn tree<
GroupId: crate::storage::traits::GroupId<VERSION>,
TreeSync: crate::storage::traits::TreeSync<VERSION>,
>(
&self,
group_id: &GroupId,
) -> Result<Option<TreeSync>, Self::PublicError> {
<Self as StorageProvider<VERSION>>::tree(self, group_id)
}
fn group_context<
GroupId: crate::storage::traits::GroupId<VERSION>,
GroupContext: crate::storage::traits::GroupContext<VERSION>,
>(
&self,
group_id: &GroupId,
) -> Result<Option<GroupContext>, Self::PublicError> {
<Self as StorageProvider<VERSION>>::group_context(self, group_id)
}
fn interim_transcript_hash<
GroupId: crate::storage::traits::GroupId<VERSION>,
InterimTranscriptHash: crate::storage::traits::InterimTranscriptHash<VERSION>,
>(
&self,
group_id: &GroupId,
) -> Result<Option<InterimTranscriptHash>, Self::PublicError> {
<Self as StorageProvider<VERSION>>::interim_transcript_hash(self, group_id)
}
fn confirmation_tag<
GroupId: crate::storage::traits::GroupId<VERSION>,
ConfirmationTag: crate::storage::traits::ConfirmationTag<VERSION>,
>(
&self,
group_id: &GroupId,
) -> Result<Option<ConfirmationTag>, Self::PublicError> {
<Self as StorageProvider<VERSION>>::confirmation_tag(self, group_id)
}
fn delete_tree<GroupId: crate::storage::traits::GroupId<VERSION>>(
&self,
group_id: &GroupId,
) -> Result<(), Self::PublicError> {
<Self as StorageProvider<VERSION>>::delete_tree(self, group_id)
}
fn delete_confirmation_tag<GroupId: crate::storage::traits::GroupId<VERSION>>(
&self,
group_id: &GroupId,
) -> Result<(), Self::PublicError> {
<Self as StorageProvider<VERSION>>::delete_confirmation_tag(self, group_id)
}
fn delete_context<GroupId: crate::storage::traits::GroupId<VERSION>>(
&self,
group_id: &GroupId,
) -> Result<(), Self::PublicError> {
<Self as StorageProvider<VERSION>>::delete_context(self, group_id)
}
fn delete_interim_transcript_hash<GroupId: crate::storage::traits::GroupId<VERSION>>(
&self,
group_id: &GroupId,
) -> Result<(), Self::PublicError> {
<Self as StorageProvider<VERSION>>::delete_interim_transcript_hash(self, group_id)
}
fn remove_proposal<
GroupId: crate::storage::traits::GroupId<VERSION>,
ProposalRef: crate::storage::traits::ProposalRef<VERSION>,
>(
&self,
group_id: &GroupId,
proposal_ref: &ProposalRef,
) -> Result<(), Self::PublicError> {
<Self as StorageProvider<VERSION>>::remove_proposal(self, group_id, proposal_ref)
}
fn clear_proposal_queue<
GroupId: crate::storage::traits::GroupId<VERSION>,
ProposalRef: crate::storage::traits::ProposalRef<VERSION>,
>(
&self,
group_id: &GroupId,
) -> Result<(), Self::PublicError> {
<Self as StorageProvider<VERSION>>::clear_proposal_queue::<GroupId, ProposalRef>(
self, group_id,
)
}
}