Skip to main content

de_mls/core/
error.rs

1//! Core library errors.
2
3use crate::mls_crypto;
4
5#[derive(Debug, thiserror::Error)]
6pub enum CoreError {
7    /// Identity error.
8    #[error("Identity error: {0}")]
9    IdentityError(#[from] mls_crypto::IdentityError),
10
11    /// MLS service error.
12    #[error("MLS error: {0}")]
13    MlsServiceError(#[from] mls_crypto::MlsServiceError),
14
15    /// Storage error.
16    #[error("Storage error: {0}")]
17    StorageError(#[from] mls_crypto::StorageError),
18
19    #[error("Consensus error: {0}")]
20    ConsensusError(#[from] hashgraph_like_consensus::error::ConsensusError),
21
22    #[error("System time error: {0}")]
23    SystemTimeError(#[from] std::time::SystemTimeError),
24
25    /// Message encoding/decoding error.
26    #[error("Message error: {0}")]
27    MessageError(#[from] prost::DecodeError),
28
29    /// JSON error.
30    #[error("JSON error: {0}")]
31    JsonError(#[from] serde_json::Error),
32
33    /// MLS group is not initialized for this handle.
34    #[error("MLS group not initialized")]
35    MlsGroupNotInitialized,
36
37    /// Steward is not set for this group handle.
38    #[error("Steward not set")]
39    StewardNotSet,
40
41    /// No proposals available for the requested operation.
42    #[error("No proposals available")]
43    NoProposals,
44
45    #[error("Invalid group update request")]
46    InvalidGroupUpdateRequest,
47
48    /// Generic handler failure.
49    #[error("Handler error: {0}")]
50    HandlerError(String),
51
52    /// Transport/delivery failure.
53    #[error("Delivery error: {0}")]
54    DeliveryError(String),
55
56    #[error("Invalid subtopic: {0}")]
57    InvalidSubtopic(String),
58}
59
60impl From<mls_crypto::MlsError> for CoreError {
61    fn from(e: mls_crypto::MlsError) -> Self {
62        match e {
63            mls_crypto::MlsError::Identity(e) => CoreError::IdentityError(e),
64            mls_crypto::MlsError::Service(e) => CoreError::MlsServiceError(e),
65            mls_crypto::MlsError::Storage(e) => CoreError::StorageError(e),
66        }
67    }
68}