Skip to main content

ncrypt_me/
error.rs

1use std::fmt::{Debug, Display, Formatter};
2
3use argon2_rs::error::Argon2Error;
4
5#[derive(Clone, PartialEq, Eq)]
6pub enum Error {
7   HashLength,
8   InvalidFileFormat,
9   VersionMismatch,
10   EncryptedInfo,
11   InvalidCredentials,
12   EncodingFailed,
13   EncryptionFailed(String),
14   DecodingFailed,
15   DecryptionFailed(String),
16   FileReadFailed,
17   Argon2(Argon2Error),
18   Credentials(CredentialsError),
19   Custom(String),
20}
21
22impl From<Argon2Error> for Error {
23   fn from(e: Argon2Error) -> Self {
24      Error::Argon2(e)
25   }
26}
27
28impl From<CredentialsError> for Error {
29   fn from(e: CredentialsError) -> Self {
30      Error::Credentials(e)
31   }
32}
33
34impl Display for Error {
35   fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
36      match self {
37         Error::HashLength => write!(f, "Hash Length cannot be less than 32 bytes"),
38         Error::InvalidFileFormat => write!(f, "Header not found, data corrupted?"),
39         Error::VersionMismatch => write!(
40            f,
41            "Version mismatch. It seems this data was encrypted with a different version that it's not compatible with the current version"
42         ),
43         Error::EncryptedInfo => write!(f, "Could not parse EncryptedInfo length"),
44         Error::InvalidCredentials => write!(f, "Invalid Credentials"),
45         Error::EncodingFailed => write!(f, "EncrytedInfo Encoding Failed"),
46         Error::EncryptionFailed(e) => write!(f, "Encryption Failed: {}", e),
47         Error::DecodingFailed => write!(f, "EncryptedInfo Decoding Failed"),
48         Error::DecryptionFailed(e) => write!(f, "Decryption Failed: {}", e),
49         Error::FileReadFailed => write!(f, "Failed to read file"),
50         Error::Argon2(e) => write!(f, "Argon2 error: {}", e),
51         Error::Credentials(e) => write!(f, "Credentials error: {}", e),
52         Error::Custom(e) => write!(f, "{}", e),
53      }
54   }
55}
56
57impl Debug for Error {
58   fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
59      write!(f, "{}", self)
60   }
61}
62
63impl std::error::Error for Error {}
64
65#[derive(Clone, PartialEq, Eq)]
66pub enum CredentialsError {
67   UsernameEmpty,
68   PasswordEmpty,
69   ConfirmPasswordEmpty,
70   PasswordsDoNotMatch,
71   Custom(String),
72}
73
74impl Display for CredentialsError {
75   fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
76      match self {
77         CredentialsError::UsernameEmpty => write!(f, "Username is empty"),
78         CredentialsError::PasswordEmpty => write!(f, "Password is empty"),
79         CredentialsError::ConfirmPasswordEmpty => write!(f, "Confirm password is empty"),
80         CredentialsError::PasswordsDoNotMatch => write!(f, "Passwords do not match"),
81         CredentialsError::Custom(e) => write!(f, "{}", e),
82      }
83   }
84}
85
86impl Debug for CredentialsError {
87   fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
88      write!(f, "{}", self)
89   }
90}
91
92impl std::error::Error for CredentialsError {}