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}