#[cfg(feature = "python-integration")]
use pyo3::PyErr;
use std::fmt::Display;
use thiserror::Error;
#[derive(Error, Debug, PartialEq)]
pub enum CharacterParseError {
#[error("Invalid character: {0}")]
InvalidCharacter(char),
#[error("Invalid index: {0}")]
InvalidIndex(usize),
#[cfg(feature = "python-integration")]
#[error("Error: {0}")]
Error(String),
#[error("Unknown string type, cannot decode")]
UnknownStringType,
}
#[cfg(feature = "python-integration")]
impl From<PyErr> for CharacterParseError {
fn from(err: PyErr) -> CharacterParseError {
CharacterParseError::Error(err.to_string())
}
}
#[cfg(feature = "python-integration")]
impl From<CharacterParseError> for PyErr {
fn from(err: CharacterParseError) -> PyErr {
pyo3::exceptions::PyException::new_err(format!("{:?}", err))
}
}
#[derive(Error, Debug, PartialEq)]
pub enum CeasarError {
#[error("Invalid shift value")]
InvalidShift,
#[error("Character parse error: {0}")]
CharacterParseError(String),
#[error("Invalid clear text: {0}")]
InvalidClearText(String),
#[error("Invalid cipher text: {0}")]
InvalidCipherText(String),
#[cfg(feature = "python-integration")]
#[error("Error: {0}")]
Error(String),
}
#[cfg(feature = "python-integration")]
impl From<PyErr> for CeasarError {
fn from(err: PyErr) -> CeasarError {
CeasarError::Error(err.to_string())
}
}
#[cfg(feature = "python-integration")]
impl From<CeasarError> for PyErr {
fn from(err: CeasarError) -> PyErr {
pyo3::exceptions::PyException::new_err(format!("{:?}", err))
}
}
impl From<CharacterParseError> for CeasarError {
fn from(err: CharacterParseError) -> CeasarError {
CeasarError::CharacterParseError(err.to_string())
}
}
impl From<CeasarError> for () {
fn from(err: CeasarError) {}
}
#[derive(Error, Debug, PartialEq)]
pub enum MixError {
#[error("Invalid input")]
InvalidInput,
#[error("Invalid key")]
InvalidKey,
#[error("Character parse error: {0}")]
CharacterParseError(CharacterParseError),
}
#[cfg(feature = "python-integration")]
impl From<MixError> for PyErr {
fn from(err: MixError) -> PyErr {
pyo3::exceptions::PyException::new_err(format!("{:?}", err))
}
}
#[derive(Error, Debug, PartialEq)]
pub enum RSAError {
#[error("Invalid character: {0}")]
CharacterParseError(CharacterParseError),
#[error("Cannot validate the key, key is a public key")]
CannotValidate,
#[error("Error occurd: {0}")]
Error(String),
#[error("The private key was not set, please factorize and calculate 'd' first")]
PrivateKeyNotSet,
}
impl From<CharacterParseError> for RSAError {
fn from(err: CharacterParseError) -> RSAError {
RSAError::CharacterParseError(err)
}
}
#[cfg(feature = "python-integration")]
impl From<PyErr> for RSAError {
fn from(err: PyErr) -> RSAError {
RSAError::Error(err.to_string())
}
}
#[cfg(feature = "python-integration")]
impl From<RSAError> for PyErr {
fn from(err: RSAError) -> PyErr {
pyo3::exceptions::PyException::new_err(format!("{:?}", err))
}
}
#[derive(Debug, PartialEq, Error)]
pub enum DESError {
#[error("Character parse error: {0}")]
CharacterParseError(CharacterParseError),
#[cfg(feature = "python-integration")]
#[error("Error: {0}")]
Error(String),
#[error("Invalid key length: {0} (in bytes)")]
InvalidKeyLength(usize),
#[error("Invalid key: {0}")]
InvalidKey(String),
}
#[cfg(feature = "python-integration")]
impl From<PyErr> for DESError {
fn from(err: PyErr) -> DESError {
DESError::Error(err.to_string())
}
}
#[cfg(feature = "python-integration")]
impl From<DESError> for PyErr {
fn from(err: DESError) -> PyErr {
pyo3::exceptions::PyException::new_err(format!("{:?}", err))
}
}
impl From<CharacterParseError> for DESError {
fn from(err: CharacterParseError) -> DESError {
DESError::CharacterParseError(err)
}
}
#[derive(Debug, PartialEq, Error)]
pub enum AffineError {
#[error("Character parse error: {0}")]
CharacterParseError(CharacterParseError),
#[error("Error: {0}")]
Error(String),
}
#[cfg(feature = "python-integration")]
impl From<PyErr> for AffineError {
fn from(err: PyErr) -> AffineError {
AffineError::Error(err.to_string())
}
}
#[cfg(feature = "python-integration")]
impl From<AffineError> for PyErr {
fn from(err: AffineError) -> PyErr {
pyo3::exceptions::PyException::new_err(format!("{:?}", err))
}
}
impl From<CharacterParseError> for AffineError {
fn from(err: CharacterParseError) -> AffineError {
AffineError::CharacterParseError(err)
}
}
#[derive(Debug, PartialEq, Error)]
pub enum VigenereError {
#[error("Character parse error: {0}")]
CharacterParseError(CharacterParseError),
#[error("Error: {0}")]
Error(String),
}
#[cfg(feature = "python-integration")]
impl From<PyErr> for VigenereError {
fn from(err: PyErr) -> VigenereError {
VigenereError::Error(err.to_string())
}
}
#[cfg(feature = "python-integration")]
impl From<VigenereError> for PyErr {
fn from(err: VigenereError) -> PyErr {
pyo3::exceptions::PyException::new_err(format!("{:?}", err))
}
}
impl From<CharacterParseError> for VigenereError {
fn from(err: CharacterParseError) -> VigenereError {
VigenereError::CharacterParseError(err)
}
}