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
use failure::Fail; use libc; use std::num::TryFromIntError; use std::string::FromUtf8Error; #[derive(Fail, Debug)] pub enum ParseAttributeError { #[fail( display = "Error parsing Netlink attribute. Expected {} bytes, found {}.", expected, found )] StaticLengthError { expected: usize, found: usize }, #[fail(display = "{}", _0)] ParseSockAddrError(#[fail(cause)] ParseSockAddrError), #[fail(display = "{}", _0)] ParseIpAddrError(#[fail(cause)] ParseIpAddrError), #[fail(display = "{}", _0)] FromUtf8Error(#[fail(cause)] FromUtf8Error), #[fail(display = "{}", _0)] TryFromIntError(#[fail(cause)] TryFromIntError), #[fail(display = "Expected a null-terminated string in Netlink response")] InvalidCStringError, } impl From<FromUtf8Error> for ParseAttributeError { fn from(error: FromUtf8Error) -> Self { ParseAttributeError::FromUtf8Error(error) } } impl From<TryFromIntError> for ParseAttributeError { fn from(error: TryFromIntError) -> Self { ParseAttributeError::TryFromIntError(error) } } #[derive(Fail, Debug)] pub enum ParseSockAddrError { #[fail(display = "Unrecognized address family")] UnrecognizedAddressFamilyError { id: libc::c_int }, } impl From<ParseSockAddrError> for ParseAttributeError { fn from(error: ParseSockAddrError) -> Self { ParseAttributeError::ParseSockAddrError(error) } } #[derive(Fail, Debug)] pub enum ParseIpAddrError { #[fail( display = "Payload does not correspond to known ip address lengths. Found {}.", found )] InvalidIpAddrLengthError { found: usize }, } impl From<ParseIpAddrError> for ParseAttributeError { fn from(error: ParseIpAddrError) -> Self { ParseAttributeError::ParseIpAddrError(error) } }