use std::error::Error;
use std::fmt;
pub type KeyResult<T> = Result<T, KeyError>;
#[derive(Debug)]
pub enum KeyError {
GenerationError(u16), SigningError(u16), StringifyError(u16), ImportError(u16), ExportError(u16), }
impl fmt::Display for KeyError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
KeyError::GenerationError(ref code) => {
let error = KeyErrorHandler::get_generation_error(code);
write!(f, "Generation Error - {}: {}", code, error)
}
KeyError::SigningError(ref code) => {
let error = KeyErrorHandler::get_signing_error(code);
write!(f, "Signing Error - {}: {}", code, error)
}
KeyError::StringifyError(ref code) => {
let error = KeyErrorHandler::get_stringify_error(code);
write!(f, "Stringify Error - {}: {}", code, error)
}
KeyError::ImportError(ref code) => {
let error = KeyErrorHandler::get_import_error(code);
write!(f, "Import Error - {}: {}", code, error)
}
KeyError::ExportError(ref code) => {
let error = KeyErrorHandler::get_export_error(code);
write!(f, "Export Error - {}: {}", code, error)
}
}
}
}
impl Error for KeyError {}
struct KeyErrorHandler;
impl KeyErrorHandler {
fn get_generation_error(code: &u16) -> &str {
match code {
1000 => "Error generating Elliptic Curve Group for keygen",
1001 => "Error generating Elliptic Curve Keypair",
1002 => "Error generating Elliptic Curve Private PEM",
1003 => "Error generating Elliptic Curve Public PEM",
1004 => "Error generating the RSA Key",
1005 => "Error generating RSA Private PEM",
1006 => "Error generating RSA Public PEM",
_ => "Unknown Error",
}
}
fn get_signing_error(code: &u16) -> &str {
match code {
2000 => "Error creating signer",
2001 => "Error passing data to sign",
2002 => "Error generating signature",
2003 => "Error decoding signature for verification",
2004 => "Error creating verifier",
2005 => "Error passing data to verify",
2006 => "Signature verification failed",
2007 => "Error initialising private key",
2008 => "Error initialising public key",
_ => "Unknown Error",
}
}
fn get_stringify_error(code: &u16) -> &str {
match code {
3000 => "Error converting private pem to string",
3001 => "Error converting public pem to string",
3007 => "Error initialising private key",
3008 => "Error initialising public key",
_ => "Unknown Error",
}
}
fn get_import_error(code: &u16) -> &str {
match code {
4000 => "Error opening file for import",
4001 => "Error reading file contents",
4002 => "Key Type missmatch",
_ => "Unknown Error",
}
}
fn get_export_error(code: &u16) -> &str {
match code {
5000 => "Error generating JSON",
5001 => "Error preparing the export file for writing",
5002 => "Error writing to the export file",
_ => "Unknown Error",
}
}
}