xref: /xiu/library/bytesio/src/bits_errors.rs (revision 69de9bbd)
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