Skip to main content

coven_replication/sync/store/membership/mutation/
error.rs

1use coven_keys::keys::KeyError;
2use coven_protocol::membership::MembershipError;
3use coven_protocol::objects::StorageError;
4use coven_storage::cloud::CloudHomeError;
5
6#[derive(Debug, thiserror::Error)]
7pub enum MembershipMutationError {
8    #[error("Bucket error: {0}")]
9    Bucket(#[from] StorageError),
10    #[error("Key error: {0}")]
11    Key(#[from] KeyError),
12    #[error("Membership error: {0}")]
13    Membership(#[from] MembershipError),
14    #[error("Cloud home error: {0}")]
15    CloudHome(#[from] CloudHomeError),
16    #[error("Crypto error: {0}")]
17    Crypto(String),
18    #[error("membership mutation encryption: {0}")]
19    Encryption(#[from] coven_keys::encryption::EncryptionError),
20    #[error("membership mutation wrapped keyring: {0}")]
21    WrappedKeyring(#[from] coven_protocol::wrapped_store_key::WrappedKeyringError),
22    #[error("membership mutation JSON: {0}")]
23    Json(#[from] serde_json::Error),
24    #[error("membership mutation history: {0}")]
25    Pull(#[source] Box<crate::sync::store::StorePullError>),
26    #[error("membership mutation chain: {0}")]
27    AnchoredChain(#[source] Box<crate::sync::store::AnchoredChainError>),
28    #[error("membership mutation worker: {0}")]
29    Blocking(#[from] coven_foundation::blocking::BlockingTaskError),
30    #[error("membership mutation Store operation: {0}")]
31    Store(#[source] Box<crate::sync::store::StoreError>),
32    #[error("membership mutation remote object: {0}")]
33    RemoteObject(#[from] coven_protocol::remote_object::RemoteObjectRecordError),
34    #[error("membership mutation Store protocol: {0}")]
35    Protocol(#[from] coven_protocol::store_commit::StoreProtocolError),
36    #[error("User {0} is not a current member")]
37    NotAMember(String),
38    #[error("Cannot revoke the last owner of a store")]
39    LastOwner,
40    #[error("the authority that initiated this membership request has been retired")]
41    InitiatingAuthorityRetired,
42    #[error("membership mutation database state: {0}")]
43    Database(#[from] coven_database::DbError),
44    #[error("pending membership mutation does not match this request: {0}")]
45    PendingMutation(String),
46    #[error("durable membership mutation is invalid: {0}")]
47    InvalidDurableMutation(String),
48    #[error("durable membership object is invalid: {0}")]
49    StoreObject(#[from] coven_protocol::objects::StoreObjectError),
50    #[error("membership mutation preparation failed: {0}")]
51    Preparation(#[from] coven_protocol::membership_mutation::MembershipPreparationError),
52    #[error("membership rotation state failed: {0}")]
53    RotationState(#[from] coven_storage::RotationStateError),
54    #[error("prepared membership commit is invalid: {0}")]
55    PreparedCommit(#[from] coven_protocol::prepared_commit::PreparedCommitError),
56    #[error("membership floor is invalid: {0}")]
57    MembershipFloor(#[from] coven_protocol::membership::MembershipFloorError),
58}
59
60impl From<crate::sync::store::StoreError> for MembershipMutationError {
61    fn from(error: crate::sync::store::StoreError) -> Self {
62        Self::Store(Box::new(error))
63    }
64}
65
66impl From<crate::sync::store::StorePullError> for MembershipMutationError {
67    fn from(error: crate::sync::store::StorePullError) -> Self {
68        Self::Pull(Box::new(error))
69    }
70}
71
72impl From<crate::sync::store::AnchoredChainError> for MembershipMutationError {
73    fn from(error: crate::sync::store::AnchoredChainError) -> Self {
74        Self::AnchoredChain(Box::new(error))
75    }
76}