use std::io;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum Error {
#[error("OS error while calling FFI")]
OsError(#[from] io::Error),
#[error("unsupported socket family: {0}")]
UnsupportedSocketFamily(u32),
#[error("failed to list processes")]
FailedToListProcesses(#[source] io::Error),
#[error("not a valid socket")]
NotAValidSocket,
#[error("not a valid proc_fdtype: {0}")]
NotAValidFDType(u32),
#[error("failed to query file descriptors")]
FailedToQueryFileDescriptors(#[source] io::Error),
#[error("unsupported file descriptor")]
UnsupportedFileDescriptor,
#[error("failed to allocate buffer")]
FailedToAllocateBuffer,
#[error("failed to get TCP table: {0}")]
FailedToGetTcpTable(i32),
#[error("failed to get UDP table: {0}")]
FailedToGetUdpTable(i32),
#[error("netlink error")]
NetLinkError,
#[cfg(any(target_os = "linux", target_os = "android"))]
#[error("netlink error: {0}")]
NetLinkPacketError(netlink_packet_core::error::ErrorMessage),
#[cfg(any(target_os = "linux", target_os = "android"))]
#[error("netlink decode error")]
NetLinkPacketDecodeError(#[from] netlink_packet_utils::errors::DecodeError),
#[error("unknown protocol: {0}")]
UnknownProtocol(u8),
}