GetNextResult

Enum GetNextResult 

Source
pub enum GetNextResult {
    Value(VarBind),
    EndOfMibView,
}
Expand description

Result of a GETNEXT operation (RFC 3416).

GETNEXT retrieves the lexicographically next OID after the requested one. This is the foundation of SNMP walking (iterating through MIB subtrees) and is also used internally by GETBULK.

§Version Differences

  • SNMPv1: EndOfMibView results in a noSuchName error response
  • SNMPv2c/v3: Returns the endOfMibView exception value in the response

§Lexicographic Ordering

OIDs are compared arc-by-arc as unsigned integers:

  • 1.3.6.1.2 < 1.3.6.1.2.1 (shorter is less than longer with same prefix)
  • 1.3.6.1.2.1 < 1.3.6.1.3 (compare at first differing arc)
  • 1.3.6.1.10 > 1.3.6.1.9 (numeric comparison, not lexicographic string)

§Example

use async_snmp::handler::GetNextResult;
use async_snmp::{Value, VarBind, Oid, oid};

struct SimpleTable {
    oids: Vec<(Oid, Value)>,  // Must be sorted!
}

impl SimpleTable {
    fn get_next(&self, after: &Oid) -> GetNextResult {
        // Find first OID that is strictly greater than 'after'
        for (oid, value) in &self.oids {
            if oid > after {
                return GetNextResult::Value(VarBind::new(oid.clone(), value.clone()));
            }
        }
        GetNextResult::EndOfMibView
    }
}

let table = SimpleTable {
    oids: vec![
        (oid!(1, 3, 6, 1, 2, 1, 1, 1, 0), Value::OctetString("sysDescr".into())),
        (oid!(1, 3, 6, 1, 2, 1, 1, 3, 0), Value::TimeTicks(12345)),
    ],
};

// Before first OID - returns first
let result = table.get_next(&oid!(1, 3, 6, 1, 2, 1, 1, 0));
assert!(result.is_value());

// After last OID - returns EndOfMibView
let result = table.get_next(&oid!(1, 3, 6, 1, 2, 1, 1, 3, 0));
assert!(result.is_end_of_mib_view());

Variants§

§

Value(VarBind)

The next OID/value pair in the MIB tree.

The returned OID must be strictly greater than the input OID.

§

EndOfMibView

No more OIDs after the given one (end of MIB view).

Return this when the requested OID is at or past the last OID in your handler’s subtree.

Implementations§

Source§

impl GetNextResult

Source

pub fn from_option(value: Option<VarBind>) -> Self

Create a GetNextResult from an Option<VarBind>.

This is a convenience method for migrating from the previous Option<VarBind> interface. None is treated as EndOfMibView.

Source

pub fn is_value(&self) -> bool

Returns true if this is a value result.

Source

pub fn is_end_of_mib_view(&self) -> bool

Returns true if this is end of MIB view.

Source

pub fn into_option(self) -> Option<VarBind>

Converts to an Option<VarBind>.

Trait Implementations§

Source§

impl Clone for GetNextResult

Source§

fn clone(&self) -> GetNextResult

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GetNextResult

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<Option<VarBind>> for GetNextResult

Source§

fn from(value: Option<VarBind>) -> Self

Converts to this type from the input type.
Source§

impl From<VarBind> for GetNextResult

Source§

fn from(vb: VarBind) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for GetNextResult

Source§

fn eq(&self, other: &GetNextResult) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for GetNextResult

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more