Skip to main content

mdk_storage_traits/
error.rs

1//! Error types for MDK storage operations
2
3use thiserror::Error;
4
5/// Error type for MDK storage operations.
6///
7/// This error type is used as the associated `Error` type for the OpenMLS
8/// `StorageProvider` trait implementation, enabling unified error handling
9/// across MLS and MDK storage operations.
10#[derive(Debug, Clone, PartialEq, Eq, Error)]
11pub enum MdkStorageError {
12    /// Database operation failed
13    #[error("database error: {0}")]
14    Database(String),
15
16    /// Serialization failed
17    #[error("serialization error: {0}")]
18    Serialization(String),
19
20    /// Deserialization failed
21    #[error("deserialization error: {0}")]
22    Deserialization(String),
23
24    /// Requested item was not found
25    #[error("not found: {0}")]
26    NotFound(String),
27
28    /// Other error
29    #[error("error: {0}")]
30    Other(String),
31}
32
33#[cfg(test)]
34mod tests {
35    use super::*;
36
37    #[test]
38    fn test_mdk_storage_error_display() {
39        let err = MdkStorageError::Database("connection failed".to_string());
40        assert_eq!(err.to_string(), "database error: connection failed");
41
42        let err = MdkStorageError::Serialization("invalid json".to_string());
43        assert_eq!(err.to_string(), "serialization error: invalid json");
44
45        let err = MdkStorageError::Deserialization("parse error".to_string());
46        assert_eq!(err.to_string(), "deserialization error: parse error");
47
48        let err = MdkStorageError::NotFound("key package".to_string());
49        assert_eq!(err.to_string(), "not found: key package");
50
51        let err = MdkStorageError::Other("unexpected error".to_string());
52        assert_eq!(err.to_string(), "error: unexpected error");
53    }
54
55    #[test]
56    fn test_mdk_storage_error_debug() {
57        let err = MdkStorageError::Database("test".to_string());
58        let debug_str = format!("{:?}", err);
59        assert!(debug_str.contains("Database"));
60        assert!(debug_str.contains("test"));
61    }
62
63    #[test]
64    fn test_mdk_storage_error_is_error() {
65        let err: Box<dyn std::error::Error> =
66            Box::new(MdkStorageError::Database("test".to_string()));
67        assert!(err.to_string().contains("database error"));
68    }
69}