IdentityRequestFilters

Struct IdentityRequestFilters 

Source
pub struct IdentityRequestFilters<'a> { /* private fields */ }
Expand description

Interprets the option block of an MacCommand::IdentityRequest.

Borrows the raw block and decodes its identity_filter options on demand. A responder uses nonce to obtain the correlation value it must echo, and selects to decide whether it is a target of the request.

Implementations§

Source§

impl<'a> IdentityRequestFilters<'a>

Source

pub fn new(options: &'a [u8]) -> Self

Wrap the option block carried by an Identity Request.

Source

pub fn nonce(&self) -> Result<Option<u32>, AppParseError>

The correlation nonce the responder must echo into its identity’s Nonce option, or None if the request carried no NONCE option.

Returns the first NONCE option; tolerates minimal (≤4 byte) encodings.

Source

pub fn hint_filtered(&self) -> bool

Whether the request carries at least one FILTER_NODE_HINT filter.

A hint filter names one node, or with a partial hint a handful, so such a request solicits few replies however far it travels. Without one the request selects by role or capability and every node it reaches may answer, which is what confines a broadcast or multicast solicitation — and its replies — to the requester’s own neighborhood.

A malformed option block reads as unfiltered, which is the conservative answer: it keeps the strict rules in force.

Source

pub fn hint_names_one_node(&self) -> bool

Whether this request’s hint filters name a node rather than a share of the mesh: at least one FILTER_NODE_HINT is present and every one of them is at least [UNIQUE_HINT_PREFIX_LEN] bytes.

This is the question the reply’s random hold turns on. The hold exists to keep many selected nodes from answering the same frame at once, so a request only one node can satisfy has nothing to spread and is answered straight away. A one-byte prefix selects a 256th of everything it reaches, which is a crowd, so it keeps the hold.

Stricter than hint_filtered, which asks only whether the request is aimed at all. Filters of the same type combine as OR, so one short filter widens the whole request and the shortest is what decides.

A malformed option block reads as unnarrowed — the conservative answer, since it keeps the hold in force.

Source

pub fn selects( &self, role: NodeRole, capabilities: NodeCapabilities, hint: &NodeHint, ) -> Result<bool, AppParseError>

Whether a node with the given identity is selected by this request.

Filters combine as a logical AND across distinct filter types and a logical OR among repeated filters of the same type. An unknown critical option (odd key) excludes the node; unknown elective options are ignored. A well-formed request with no filters (a unicast request) selects every node.

Trait Implementations§

Source§

impl<'a> Clone for IdentityRequestFilters<'a>

Source§

fn clone(&self) -> IdentityRequestFilters<'a>

Returns a duplicate of the value. Read more
1.0.0§

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

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for IdentityRequestFilters<'a>

Source§

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

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

impl<'a> Copy for IdentityRequestFilters<'a>

Auto Trait Implementations§

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

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

§

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
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

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
§

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

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

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

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

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

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

§

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

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

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

Performs the conversion.