GetResult

Enum GetResult 

Source
pub enum GetResult {
    Value(Value),
    NoSuchObject,
    NoSuchInstance,
}
Expand description

Result of a GET operation on a specific OID (RFC 3416).

This enum distinguishes between the RFC 3416-mandated exception types:

  • Value: The OID exists and has the given value
  • NoSuchObject: The OID’s object type is not supported (agent doesn’t implement this MIB)
  • NoSuchInstance: The object type exists but this specific instance doesn’t (e.g., table row doesn’t exist)

§Version Differences

  • SNMPv1: Both exception types result in a noSuchName error response
  • SNMPv2c/v3: Returns the appropriate exception value in the response varbind

§Choosing NoSuchObject vs NoSuchInstance

SituationVariant
OID prefix not recognizedNoSuchObject
Scalar object not implementedNoSuchObject
Table column not implementedNoSuchObject
Table row doesn’t existNoSuchInstance
Scalar has no value (optional)NoSuchInstance

§Example: Scalar Objects

use async_snmp::handler::GetResult;
use async_snmp::{Value, oid};

fn get_scalar(oid: &async_snmp::Oid) -> GetResult {
    if oid == &oid!(1, 3, 6, 1, 2, 1, 1, 1, 0) {  // sysDescr.0
        GetResult::Value(Value::OctetString("My SNMP Agent".into()))
    } else if oid == &oid!(1, 3, 6, 1, 2, 1, 1, 2, 0) {  // sysObjectID.0
        GetResult::Value(Value::ObjectIdentifier(oid!(1, 3, 6, 1, 4, 1, 99999)))
    } else {
        GetResult::NoSuchObject
    }
}

§Example: Table Objects

use async_snmp::handler::GetResult;
use async_snmp::{Value, Oid, oid};

struct IfTable {
    entries: Vec<(u32, String)>,  // (index, description)
}

impl IfTable {
    fn get(&self, oid: &Oid) -> GetResult {
        let if_descr_prefix = oid!(1, 3, 6, 1, 2, 1, 2, 2, 1, 2);

        if !oid.starts_with(&if_descr_prefix) {
            return GetResult::NoSuchObject;  // Not our column
        }

        // Extract index from OID (position after prefix)
        let arcs = oid.arcs();
        if arcs.len() != if_descr_prefix.len() + 1 {
            return GetResult::NoSuchInstance;  // Wrong index format
        }

        let index = arcs[if_descr_prefix.len()];
        match self.entries.iter().find(|(i, _)| *i == index) {
            Some((_, desc)) => GetResult::Value(Value::OctetString(desc.clone().into())),
            None => GetResult::NoSuchInstance,  // Row doesn't exist
        }
    }
}

Variants§

§

Value(Value)

The OID exists and has this value.

§

NoSuchObject

The object type is not implemented by this agent.

Use this when the OID prefix (object type) is not recognized. This typically means the handler doesn’t implement this part of the MIB.

§

NoSuchInstance

The object type exists but this specific instance doesn’t.

Use this when the OID prefix is valid but the instance identifier (e.g., table index) doesn’t exist. This is common for table objects where the row has been deleted or never existed.

Implementations§

Source§

impl GetResult

Source

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

Create a GetResult from an Option<Value>.

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

Trait Implementations§

Source§

impl Clone for GetResult

Source§

fn clone(&self) -> GetResult

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 GetResult

Source§

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

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

impl From<Option<Value>> for GetResult

Source§

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

Converts to this type from the input type.
Source§

impl From<Value> for GetResult

Source§

fn from(value: Value) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for GetResult

Source§

fn eq(&self, other: &GetResult) -> 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 GetResult

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