snmp_parser/
error.rs

1use asn1_rs::Error;
2use nom::error::{ErrorKind, ParseError};
3use std::convert::From;
4
5#[derive(Debug, PartialEq, thiserror::Error)]
6pub enum SnmpError {
7    #[error("Invalid message: not a DER sequence, or unexpected number of items, etc.")]
8    InvalidMessage,
9    #[error("Invalid version: not a number, or not in supported range (1, 2 or 3)")]
10    InvalidVersion,
11    #[error("Unknown or invalid PDU type")]
12    InvalidPduType,
13    #[error("Invalid PDU: content does not match type, or content cannot be decoded")]
14    InvalidPdu,
15    #[error("Invalid SNMPv3 header data")]
16    InvalidHeaderData,
17    #[error("Invalid SNMPv3 scoped PDU")]
18    InvalidScopedPduData,
19    #[error("Invalid SNMPv3 security model")]
20    InvalidSecurityModel,
21    #[error("Nom error")]
22    NomError(ErrorKind),
23    #[error("BER error")]
24    BerError(#[from] Error),
25}
26
27impl<I> ParseError<I> for SnmpError {
28    fn from_error_kind(_input: I, kind: ErrorKind) -> Self {
29        SnmpError::NomError(kind)
30    }
31    fn append(_input: I, kind: ErrorKind, _other: Self) -> Self {
32        SnmpError::NomError(kind)
33    }
34}
35
36impl From<SnmpError> for nom::Err<SnmpError> {
37    fn from(e: SnmpError) -> nom::Err<SnmpError> {
38        nom::Err::Error(e)
39    }
40}