ncrypt-me 0.3.0

Dead simple encryption library
Documentation
use std::fmt::{Debug, Display, Formatter};

use argon2_rs::error::Argon2Error;

#[derive(Clone, PartialEq, Eq)]
pub enum Error {
   HashLength,
   InvalidFileFormat,
   VersionMismatch,
   EncryptedInfo,
   InvalidCredentials,
   EncodingFailed,
   EncryptionFailed(String),
   DecodingFailed,
   DecryptionFailed(String),
   FileReadFailed,
   Argon2(Argon2Error),
   Credentials(CredentialsError),
   Custom(String),
}

impl From<Argon2Error> for Error {
   fn from(e: Argon2Error) -> Self {
      Error::Argon2(e)
   }
}

impl From<CredentialsError> for Error {
   fn from(e: CredentialsError) -> Self {
      Error::Credentials(e)
   }
}

impl Display for Error {
   fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
      match self {
         Error::HashLength => write!(f, "Hash Length cannot be less than 32 bytes"),
         Error::InvalidFileFormat => write!(f, "Header not found, data corrupted?"),
         Error::VersionMismatch => write!(
            f,
            "Version mismatch. It seems this data was encrypted with a different version that it's not compatible with the current version"
         ),
         Error::EncryptedInfo => write!(f, "Could not parse EncryptedInfo length"),
         Error::InvalidCredentials => write!(f, "Invalid Credentials"),
         Error::EncodingFailed => write!(f, "EncrytedInfo Encoding Failed"),
         Error::EncryptionFailed(e) => write!(f, "Encryption Failed: {}", e),
         Error::DecodingFailed => write!(f, "EncryptedInfo Decoding Failed"),
         Error::DecryptionFailed(e) => write!(f, "Decryption Failed: {}", e),
         Error::FileReadFailed => write!(f, "Failed to read file"),
         Error::Argon2(e) => write!(f, "Argon2 error: {}", e),
         Error::Credentials(e) => write!(f, "Credentials error: {}", e),
         Error::Custom(e) => write!(f, "{}", e),
      }
   }
}

impl Debug for Error {
   fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
      write!(f, "{}", self)
   }
}

impl std::error::Error for Error {}

#[derive(Clone, PartialEq, Eq)]
pub enum CredentialsError {
   UsernameEmpty,
   PasswordEmpty,
   ConfirmPasswordEmpty,
   PasswordsDoNotMatch,
   Custom(String),
}

impl Display for CredentialsError {
   fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
      match self {
         CredentialsError::UsernameEmpty => write!(f, "Username is empty"),
         CredentialsError::PasswordEmpty => write!(f, "Password is empty"),
         CredentialsError::ConfirmPasswordEmpty => write!(f, "Confirm password is empty"),
         CredentialsError::PasswordsDoNotMatch => write!(f, "Passwords do not match"),
         CredentialsError::Custom(e) => write!(f, "{}", e),
      }
   }
}

impl Debug for CredentialsError {
   fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
      write!(f, "{}", self)
   }
}

impl std::error::Error for CredentialsError {}