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 {}