1769d75b4SHarlan use super::bytes_errors::BytesReadError; 2769d75b4SHarlan use super::bytes_errors::BytesWriteError; 3769d75b4SHarlan use failure::{Backtrace, Fail}; 4769d75b4SHarlan use std::fmt; 5769d75b4SHarlan 6769d75b4SHarlan #[derive(Debug, Fail)] 7769d75b4SHarlan pub enum BitErrorValue { 8*69de9bbdSHarlanC #[fail(display = "bytes read error")] 9769d75b4SHarlan BytesReadError(BytesReadError), 10*69de9bbdSHarlanC #[fail(display = "bytes write error")] 11769d75b4SHarlan BytesWriteError(BytesWriteError), 12*69de9bbdSHarlanC #[fail(display = "the size is bigger than 64")] 13769d75b4SHarlan TooBig, 14*69de9bbdSHarlanC #[fail(display = "cannot write the whole 8 bits")] 15769d75b4SHarlan CannotWrite8Bit, 16*69de9bbdSHarlanC #[fail(display = "cannot read byte")] 17ccd9a1faSHarlan CannotReadByte, 18769d75b4SHarlan } 19769d75b4SHarlan #[derive(Debug)] 20769d75b4SHarlan pub struct BitError { 21769d75b4SHarlan pub value: BitErrorValue, 22769d75b4SHarlan } 23769d75b4SHarlan 24769d75b4SHarlan impl From<BitErrorValue> for BitError { from(val: BitErrorValue) -> Self25769d75b4SHarlan fn from(val: BitErrorValue) -> Self { 26769d75b4SHarlan BitError { value: val } 27769d75b4SHarlan } 28769d75b4SHarlan } 29769d75b4SHarlan 30769d75b4SHarlan impl From<BytesReadError> for BitError { from(error: BytesReadError) -> Self31769d75b4SHarlan fn from(error: BytesReadError) -> Self { 32769d75b4SHarlan BitError { 33769d75b4SHarlan value: BitErrorValue::BytesReadError(error), 34769d75b4SHarlan } 35769d75b4SHarlan } 36769d75b4SHarlan } 37769d75b4SHarlan 38769d75b4SHarlan impl From<BytesWriteError> for BitError { from(error: BytesWriteError) -> Self39769d75b4SHarlan fn from(error: BytesWriteError) -> Self { 40769d75b4SHarlan BitError { 41769d75b4SHarlan value: BitErrorValue::BytesWriteError(error), 42769d75b4SHarlan } 43769d75b4SHarlan } 44769d75b4SHarlan } 45769d75b4SHarlan 46769d75b4SHarlan // impl From<Elapsed> for NetIOError { 47769d75b4SHarlan // fn from(error: Elapsed) -> Self { 48769d75b4SHarlan // NetIOError { 49769d75b4SHarlan // value: NetIOErrorValue::TimeoutError(error), 50769d75b4SHarlan // } 51769d75b4SHarlan // } 52769d75b4SHarlan // } 53769d75b4SHarlan 54769d75b4SHarlan impl fmt::Display for BitError { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result55769d75b4SHarlan fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 56769d75b4SHarlan fmt::Display::fmt(&self.value, f) 57769d75b4SHarlan } 58769d75b4SHarlan } 59769d75b4SHarlan 60769d75b4SHarlan impl Fail for BitError { cause(&self) -> Option<&dyn Fail>61769d75b4SHarlan fn cause(&self) -> Option<&dyn Fail> { 62769d75b4SHarlan self.value.cause() 63769d75b4SHarlan } 64769d75b4SHarlan backtrace(&self) -> Option<&Backtrace>65769d75b4SHarlan fn backtrace(&self) -> Option<&Backtrace> { 66769d75b4SHarlan self.value.backtrace() 67769d75b4SHarlan } 68769d75b4SHarlan } 69