Skip to main content

bitwarden_vault/
error.rs

1use bitwarden_error::bitwarden_error;
2use thiserror::Error;
3
4use crate::{CipherError, cipher::blob::BlobEncryptionError};
5
6/// Generic error type for vault encryption errors.
7#[allow(missing_docs)]
8#[bitwarden_error(flat)]
9#[derive(Debug, Error)]
10pub enum EncryptError {
11    #[error(transparent)]
12    Crypto(#[from] bitwarden_crypto::CryptoError),
13    #[error(transparent)]
14    BlobEncryption(#[from] BlobEncryptionError),
15    #[error("Client User Id has not been set")]
16    MissingUserId,
17}
18
19/// Generic error type for decryption errors
20#[allow(missing_docs)]
21#[bitwarden_error(flat)]
22#[derive(Debug, Error)]
23pub enum DecryptError {
24    #[error(transparent)]
25    Crypto(#[from] bitwarden_crypto::CryptoError),
26}
27
28#[allow(missing_docs)]
29#[derive(Debug, Error)]
30pub enum VaultParseError {
31    #[error(transparent)]
32    Chrono(#[from] chrono::ParseError),
33    #[error(transparent)]
34    Crypto(#[from] bitwarden_crypto::CryptoError),
35    #[error(transparent)]
36    MissingField(#[from] bitwarden_core::MissingFieldError),
37    #[error(transparent)]
38    SerdeJson(#[from] serde_json::Error),
39}
40
41impl From<VaultParseError> for CipherError {
42    fn from(e: VaultParseError) -> Self {
43        match e {
44            VaultParseError::Crypto(e) => Self::Crypto(e),
45            VaultParseError::MissingField(e) => Self::MissingField(e),
46            VaultParseError::Chrono(e) => Self::Chrono(e),
47            VaultParseError::SerdeJson(e) => Self::SerdeJson(e),
48        }
49    }
50}