GetResult

Enum GetResult 

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

Result of a GET operation on a specific OID.

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)

For SNMPv1, both exception types result in a noSuchName error response. For SNMPv2c/v3, they result in the appropriate exception value in the response.

§Example

use async_snmp::handler::{MibHandler, RequestContext, GetResult, GetNextResult, BoxFuture};
use async_snmp::{Oid, Value, VarBind, oid};

struct IfTableHandler {
    // Simulates interface table with indices 1 and 2
    interfaces: Vec<u32>,
}

impl MibHandler for IfTableHandler {
    fn get<'a>(&'a self, _ctx: &'a RequestContext, oid: &'a Oid) -> BoxFuture<'a, GetResult> {
        Box::pin(async move {
            let if_descr_prefix = oid!(1, 3, 6, 1, 2, 1, 2, 2, 1, 2);

            if oid.starts_with(&if_descr_prefix) {
                // Extract index from OID
                if let Some(&index) = oid.arcs().get(if_descr_prefix.len()) {
                    if self.interfaces.contains(&index) {
                        return GetResult::Value(Value::OctetString(
                            format!("eth{}", index - 1).into()
                        ));
                    }
                    // Index exists in MIB but not in our table
                    return GetResult::NoSuchInstance;
                }
            }
            // OID is not in our MIB at all
            GetResult::NoSuchObject
        })
    }

    fn get_next<'a>(&'a self, _ctx: &'a RequestContext, _oid: &'a Oid) -> BoxFuture<'a, GetNextResult> {
        Box::pin(async move { GetNextResult::EndOfMibView }) // Simplified
    }
}

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.

§

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.

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