1e2687b83SHarlanC use { 288325f54SHarlanC bytesio::bytes_errors::{BytesReadError, BytesWriteError}, 3a4440553SHarlanC failure::{Backtrace, Fail}, 4f9029ceaSHarlanC std::{fmt, io::Error, time::SystemTimeError}, 5e2687b83SHarlanC }; 6c2f3fbfaSHarlanC 7c2f3fbfaSHarlanC #[derive(Debug, Fail)] 8ff1f1192SHarlanC pub enum HandshakeErrorValue { 9*69de9bbdSHarlanC #[fail(display = "bytes read error: {}", _0)] 10ff1f1192SHarlanC BytesReadError(BytesReadError), 11*69de9bbdSHarlanC #[fail(display = "bytes write error: {}", _0)] 12ff1f1192SHarlanC BytesWriteError(BytesWriteError), 13*69de9bbdSHarlanC #[fail(display = "system time error: {}", _0)] 14ff1f1192SHarlanC SysTimeError(SystemTimeError), 15*69de9bbdSHarlanC #[fail(display = "digest error: {}", _0)] 16a4440553SHarlanC DigestError(DigestError), 17*69de9bbdSHarlanC #[fail(display = "Digest not found error")] 18ff1f1192SHarlanC DigestNotFound, 19*69de9bbdSHarlanC #[fail(display = "s0 version not correct error")] 20ff1f1192SHarlanC S0VersionNotCorrect, 21*69de9bbdSHarlanC #[fail(display = "io error")] 22f9029ceaSHarlanC IOError(Error), 23f9029ceaSHarlanC } 24f9029ceaSHarlanC 25f9029ceaSHarlanC impl From<Error> for HandshakeError { from(error: Error) -> Self26f9029ceaSHarlanC fn from(error: Error) -> Self { 27f9029ceaSHarlanC HandshakeError { 28f9029ceaSHarlanC value: HandshakeErrorValue::IOError(error), 29f9029ceaSHarlanC } 30f9029ceaSHarlanC } 31ff1f1192SHarlanC } 32ff1f1192SHarlanC 33c2f3fbfaSHarlanC #[derive(Debug)] 34ff1f1192SHarlanC pub struct HandshakeError { 35ff1f1192SHarlanC pub value: HandshakeErrorValue, 36ff1f1192SHarlanC } 37ff1f1192SHarlanC 38ff1f1192SHarlanC impl From<HandshakeErrorValue> for HandshakeError { from(val: HandshakeErrorValue) -> Self39ff1f1192SHarlanC fn from(val: HandshakeErrorValue) -> Self { 40ff1f1192SHarlanC HandshakeError { value: val } 41ff1f1192SHarlanC } 42ff1f1192SHarlanC } 43ff1f1192SHarlanC 44ff1f1192SHarlanC impl From<BytesReadError> for HandshakeError { from(error: BytesReadError) -> Self45ff1f1192SHarlanC fn from(error: BytesReadError) -> Self { 46ff1f1192SHarlanC HandshakeError { 47ff1f1192SHarlanC value: HandshakeErrorValue::BytesReadError(error), 48ff1f1192SHarlanC } 49ff1f1192SHarlanC } 50ff1f1192SHarlanC } 51ff1f1192SHarlanC 52ff1f1192SHarlanC impl From<BytesWriteError> for HandshakeError { from(error: BytesWriteError) -> Self53ff1f1192SHarlanC fn from(error: BytesWriteError) -> Self { 54ff1f1192SHarlanC HandshakeError { 55ff1f1192SHarlanC value: HandshakeErrorValue::BytesWriteError(error), 56ff1f1192SHarlanC } 57ff1f1192SHarlanC } 58ff1f1192SHarlanC } 59ff1f1192SHarlanC 60ff1f1192SHarlanC impl From<SystemTimeError> for HandshakeError { from(error: SystemTimeError) -> Self61ff1f1192SHarlanC fn from(error: SystemTimeError) -> Self { 62ff1f1192SHarlanC HandshakeError { 63ff1f1192SHarlanC value: HandshakeErrorValue::SysTimeError(error), 64ff1f1192SHarlanC } 65ff1f1192SHarlanC } 66ff1f1192SHarlanC } 67c2f3fbfaSHarlanC 68a4440553SHarlanC impl From<DigestError> for HandshakeError { from(error: DigestError) -> Self69a4440553SHarlanC fn from(error: DigestError) -> Self { 70a4440553SHarlanC HandshakeError { 71a4440553SHarlanC value: HandshakeErrorValue::DigestError(error), 72a4440553SHarlanC } 73a4440553SHarlanC } 74a4440553SHarlanC } 75a4440553SHarlanC 76c2f3fbfaSHarlanC impl fmt::Display for HandshakeError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result77c2f3fbfaSHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 78c2f3fbfaSHarlanC fmt::Display::fmt(&self.value, f) 79c2f3fbfaSHarlanC } 80c2f3fbfaSHarlanC } 81c2f3fbfaSHarlanC 82c2f3fbfaSHarlanC impl Fail for HandshakeError { cause(&self) -> Option<&dyn Fail>83c2f3fbfaSHarlanC fn cause(&self) -> Option<&dyn Fail> { 84c2f3fbfaSHarlanC self.value.cause() 85c2f3fbfaSHarlanC } 86c2f3fbfaSHarlanC backtrace(&self) -> Option<&Backtrace>87c2f3fbfaSHarlanC fn backtrace(&self) -> Option<&Backtrace> { 88c2f3fbfaSHarlanC self.value.backtrace() 89c2f3fbfaSHarlanC } 90c2f3fbfaSHarlanC } 91a4440553SHarlanC 92a4440553SHarlanC #[derive(Debug)] 93a4440553SHarlanC pub struct DigestError { 94a4440553SHarlanC pub value: DigestErrorValue, 95a4440553SHarlanC } 96a4440553SHarlanC 97a4440553SHarlanC #[derive(Debug, Fail)] 98a4440553SHarlanC pub enum DigestErrorValue { 99*69de9bbdSHarlanC #[fail(display = "bytes read error: {}", _0)] 100a4440553SHarlanC BytesReadError(BytesReadError), 101*69de9bbdSHarlanC #[fail(display = "digest length not correct")] 102a4440553SHarlanC DigestLengthNotCorrect, 103*69de9bbdSHarlanC #[fail(display = "cannot generate digest")] 104a4440553SHarlanC CannotGenerate, 105*69de9bbdSHarlanC #[fail(display = "unknow schema")] 106a4440553SHarlanC UnknowSchema, 107a4440553SHarlanC } 108a4440553SHarlanC 109a4440553SHarlanC impl From<BytesReadError> for DigestError { from(error: BytesReadError) -> Self110a4440553SHarlanC fn from(error: BytesReadError) -> Self { 111a4440553SHarlanC DigestError { 112a4440553SHarlanC value: DigestErrorValue::BytesReadError(error), 113a4440553SHarlanC } 114a4440553SHarlanC } 115a4440553SHarlanC } 116a4440553SHarlanC 117a4440553SHarlanC impl fmt::Display for DigestError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result118a4440553SHarlanC fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 119a4440553SHarlanC fmt::Display::fmt(&self.value, f) 120a4440553SHarlanC } 121a4440553SHarlanC } 122a4440553SHarlanC 123a4440553SHarlanC impl Fail for DigestError { cause(&self) -> Option<&dyn Fail>124a4440553SHarlanC fn cause(&self) -> Option<&dyn Fail> { 125a4440553SHarlanC self.value.cause() 126a4440553SHarlanC } 127a4440553SHarlanC backtrace(&self) -> Option<&Backtrace>128a4440553SHarlanC fn backtrace(&self) -> Option<&Backtrace> { 129a4440553SHarlanC self.value.backtrace() 130a4440553SHarlanC } 131a4440553SHarlanC } 132