Skip to main content

egide_transit/
error.rs

1//! Transit engine error types.
2
3use thiserror::Error;
4
5/// Errors that can occur in the Transit Engine.
6#[derive(Debug, Error)]
7pub enum TransitError {
8    /// Key not found.
9    #[error("key not found: {0}")]
10    KeyNotFound(String),
11
12    /// Key already exists.
13    #[error("key already exists: {0}")]
14    KeyExists(String),
15
16    /// Key version not found.
17    #[error("key version not found: {name} v{version}")]
18    VersionNotFound {
19        /// Key name.
20        name: String,
21        /// Version number.
22        version: u32,
23    },
24
25    /// Version too old for encryption.
26    #[error("key version {version} is below min_encryption_version {min}")]
27    VersionBelowMinEncryption {
28        /// Requested version.
29        version: u32,
30        /// Minimum allowed version.
31        min: u32,
32    },
33
34    /// Version too old for decryption.
35    #[error("key version {version} is below min_decryption_version {min}")]
36    VersionBelowMinDecryption {
37        /// Ciphertext version.
38        version: u32,
39        /// Minimum allowed version.
40        min: u32,
41    },
42
43    /// Invalid ciphertext format.
44    #[error("invalid ciphertext format")]
45    InvalidCiphertext,
46
47    /// Decryption failed.
48    #[error("decryption failed")]
49    DecryptionFailed,
50
51    /// Operation not allowed on this key.
52    #[error("operation not allowed: {0}")]
53    OperationNotAllowed(String),
54
55    /// Invalid key name.
56    #[error("invalid key name: {0}")]
57    InvalidKeyName(String),
58
59    /// Invalid key type.
60    #[error("invalid key type: {0}")]
61    InvalidKeyType(String),
62
63    /// Key is not exportable.
64    #[error("key is not exportable: {0}")]
65    NotExportable(String),
66
67    /// Key deletion not allowed.
68    #[error("deletion not allowed for key: {0}")]
69    DeletionNotAllowed(String),
70
71    /// Storage error.
72    #[error("storage error: {0}")]
73    Storage(String),
74
75    /// Cryptographic error.
76    #[error("crypto error: {0}")]
77    Crypto(String),
78}
79
80impl From<egide_crypto::CryptoError> for TransitError {
81    fn from(e: egide_crypto::CryptoError) -> Self {
82        TransitError::Crypto(e.to_string())
83    }
84}
85
86impl From<egide_storage::StorageError> for TransitError {
87    fn from(e: egide_storage::StorageError) -> Self {
88        TransitError::Storage(e.to_string())
89    }
90}