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 std::num::TryFromIntError; use std::string::FromUtf8Error; use thiserror::Error; #[derive(Error, Debug)] pub enum ParseAttributeError { #[error( "Error parsing Netlink attribute. Expected {} bytes, found {}.", expected, found )] StaticLengthError { expected: usize, found: usize }, #[error("{0}")] ParseSockAddrError(#[source] ParseSockAddrError), #[error("{0}")] ParseIpAddrError(#[source] ParseIpAddrError), #[error("{0}")] FromUtf8Error(#[source] FromUtf8Error), #[error("{0}")] TryFromIntError(#[source] TryFromIntError), #[error("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(Error, Debug)] pub enum ParseSockAddrError { #[error("Unrecognized address family")] UnrecognizedAddressFamilyError { id: libc::c_int }, } impl From<ParseSockAddrError> for ParseAttributeError { fn from(error: ParseSockAddrError) -> Self { ParseAttributeError::ParseSockAddrError(error) } } #[derive(Error, Debug)] pub enum ParseIpAddrError { #[error( "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) } }