#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ParseError
{
TooManyProgramLines,
LineColumnNumberExceedsMaximum,
CouldNotResolveOffset,
NotAllOffsetsHaveBeenResolved(Vec<String>),
CouldNotResolveFileDescriptorLabel,
NotAllFileDescriptorLabelsHaveBeenResolved(Vec<String>),
JumpOrRelativeFunctionOffsetOfNegativeOneCreatesAnInfiniteLoop,
JumpOffsetIsTooLargeForI16,
SomeJumpLabelsAreUnresolved,
RelativeFunctionOffsetIsTooLargeForI32,
SomeRelativeFunctionNamesAreUnresolved,
MaximumNumberOfInstructionsUsed,
ThereAreNoInstructions,
ThereAreMoreThanU32MaxInstructions,
NoBpfTypeFormatData,
MaximumBpfTypeFormatDataSizeExceeded,
CouldNotLoadBpfTypeFormatData(Errno, Option<CString>),
BpfTypeFormat(BpfTypeFormatError),
InvalidBpfTypeFormatDataSize(TryFromIntError),
FileDescriptorMapResolve(FileDescriptorsMapResolveError),
}
impl Display for ParseError
{
#[inline(always)]
fn fmt(&self, f: &mut Formatter) -> fmt::Result
{
Debug::fmt(self, f)
}
}
impl error::Error for ParseError
{
#[inline(always)]
fn source(&self) -> Option<&(dyn error::Error + 'static)>
{
use self::ParseError::*;
match self
{
&BpfTypeFormat(ref error) => Some(error),
&InvalidBpfTypeFormatDataSize(ref error) => Some(error),
&FileDescriptorMapResolve(ref error) => Some(error),
_ => None,
}
}
}
impl From<BpfTypeFormatError> for ParseError
{
#[inline(always)]
fn from(value: BpfTypeFormatError) -> Self
{
ParseError::BpfTypeFormat(value)
}
}
impl From<TryFromIntError> for ParseError
{
#[inline(always)]
fn from(value: TryFromIntError) -> Self
{
ParseError::InvalidBpfTypeFormatDataSize(value)
}
}
impl From<FileDescriptorsMapResolveError> for ParseError
{
#[inline(always)]
fn from(value: FileDescriptorsMapResolveError) -> Self
{
ParseError::FileDescriptorMapResolve(value)
}
}