1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
use ffi::ErrorCode; use std::error::Error; use std::{fmt, io}; pub trait ToErrorCode { fn to_error_code(&self) -> ErrorCode; } #[derive(Debug)] pub enum IndyCryptoError { InvalidParam1(String), InvalidParam2(String), InvalidParam3(String), InvalidParam4(String), InvalidParam5(String), InvalidParam6(String), InvalidParam7(String), InvalidParam8(String), InvalidParam9(String), InvalidState(String), InvalidStructure(String), IOError(io::Error), } impl fmt::Display for IndyCryptoError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { IndyCryptoError::InvalidParam1(ref description) => write!(f, "Invalid param 1: {}", description), IndyCryptoError::InvalidParam2(ref description) => write!(f, "Invalid param 2: {}", description), IndyCryptoError::InvalidParam3(ref description) => write!(f, "Invalid param 3: {}", description), IndyCryptoError::InvalidParam4(ref description) => write!(f, "Invalid param 4: {}", description), IndyCryptoError::InvalidParam5(ref description) => write!(f, "Invalid param 4: {}", description), IndyCryptoError::InvalidParam6(ref description) => write!(f, "Invalid param 4: {}", description), IndyCryptoError::InvalidParam7(ref description) => write!(f, "Invalid param 4: {}", description), IndyCryptoError::InvalidParam8(ref description) => write!(f, "Invalid param 4: {}", description), IndyCryptoError::InvalidParam9(ref description) => write!(f, "Invalid param 4: {}", description), IndyCryptoError::InvalidState(ref description) => write!(f, "Invalid library state: {}", description), IndyCryptoError::InvalidStructure(ref description) => write!(f, "Invalid structure: {}", description), IndyCryptoError::IOError(ref err) => err.fmt(f) } } } impl Error for IndyCryptoError { fn description(&self) -> &str { match *self { IndyCryptoError::InvalidParam1(ref description) | IndyCryptoError::InvalidParam2(ref description) | IndyCryptoError::InvalidParam3(ref description) | IndyCryptoError::InvalidParam4(ref description) | IndyCryptoError::InvalidParam5(ref description) | IndyCryptoError::InvalidParam6(ref description) | IndyCryptoError::InvalidParam7(ref description) | IndyCryptoError::InvalidParam8(ref description) | IndyCryptoError::InvalidParam9(ref description) | IndyCryptoError::InvalidState(ref description) | IndyCryptoError::InvalidStructure(ref description) => description, IndyCryptoError::IOError(ref err) => err.description() } } fn cause(&self) -> Option<&Error> { match *self { IndyCryptoError::InvalidParam1(_) | IndyCryptoError::InvalidParam2(_) | IndyCryptoError::InvalidParam3(_) | IndyCryptoError::InvalidParam4(_) | IndyCryptoError::InvalidParam5(_) | IndyCryptoError::InvalidParam6(_) | IndyCryptoError::InvalidParam7(_) | IndyCryptoError::InvalidParam8(_) | IndyCryptoError::InvalidParam9(_) | IndyCryptoError::InvalidState(_) | IndyCryptoError::InvalidStructure(_) => None, IndyCryptoError::IOError(ref err) => Some(err) } } } impl ToErrorCode for IndyCryptoError { fn to_error_code(&self) -> ErrorCode { match *self { IndyCryptoError::InvalidParam1(_) => ErrorCode::CommonInvalidParam1, IndyCryptoError::InvalidParam2(_) => ErrorCode::CommonInvalidParam2, IndyCryptoError::InvalidParam3(_) => ErrorCode::CommonInvalidParam3, IndyCryptoError::InvalidParam4(_) => ErrorCode::CommonInvalidParam4, IndyCryptoError::InvalidParam5(_) => ErrorCode::CommonInvalidParam5, IndyCryptoError::InvalidParam6(_) => ErrorCode::CommonInvalidParam6, IndyCryptoError::InvalidParam7(_) => ErrorCode::CommonInvalidParam7, IndyCryptoError::InvalidParam8(_) => ErrorCode::CommonInvalidParam8, IndyCryptoError::InvalidParam9(_) => ErrorCode::CommonInvalidParam9, IndyCryptoError::InvalidState(_) => ErrorCode::CommonInvalidState, IndyCryptoError::InvalidStructure(_) => ErrorCode::CommonInvalidStructure, IndyCryptoError::IOError(_) => ErrorCode::CommonIOError } } }