pub struct KBucketsTable<TKey, TVal> { /* private fields */ }
Expand description

A KBucketsTable represents a Kademlia routing table.

Implementations§

source§

impl<TKey, TVal> KBucketsTable<TKey, TVal>where TKey: Clone + AsRef<KeyBytes>, TVal: Clone,

source

pub fn new(local_key: TKey, pending_timeout: Duration) -> Self

Creates a new, empty Kademlia routing table with entries partitioned into buckets as per the Kademlia protocol.

The given pending_timeout specifies the duration after creation of a PendingEntry after which it becomes eligible for insertion into a full bucket, replacing the least-recently (dis)connected node.

source

pub fn local_key(&self) -> &TKey

Returns the local key.

source

pub fn entry<'a>(&'a mut self, key: &'a TKey) -> Entry<'a, TKey, TVal>

Returns an Entry for the given key, representing the state of the entry in the routing table.

source

pub fn iter(&mut self) -> impl Iterator<Item = KBucketRef<'_, TKey, TVal>> + '_

Returns an iterator over all buckets.

The buckets are ordered by proximity to the local_key, i.e. the first bucket is the closest bucket (containing at most one key).

source

pub fn bucket<K>(&mut self, key: &K) -> Option<KBucketRef<'_, TKey, TVal>>where K: AsRef<KeyBytes>,

Returns the bucket for the distance to the given key.

Returns None if the given key refers to the local key.

source

pub fn take_applied_pending(&mut self) -> Option<AppliedPending<TKey, TVal>>

Consumes the next applied pending entry, if any.

When an entry is attempted to be inserted and the respective bucket is full, it may be recorded as pending insertion after a timeout, see InsertResult::Pending.

If the oldest currently disconnected entry in the respective bucket does not change its status until the timeout of pending entry expires, it is evicted and the pending entry inserted instead. These insertions of pending entries happens lazily, whenever the KBucketsTable is accessed, and the corresponding buckets are updated accordingly. The fact that a pending entry was applied is recorded in the KBucketsTable in the form of AppliedPending results, which must be consumed by calling this function.

source

pub fn closest_keys<'a, T>( &'a mut self, target: &'a T ) -> impl Iterator<Item = TKey> + 'awhere T: AsRef<KeyBytes>,

Returns an iterator over the keys closest to target, ordered by increasing distance.

source

pub fn closest<'a, T>( &'a mut self, target: &'a T ) -> impl Iterator<Item = EntryView<TKey, TVal>> + 'awhere T: Clone + AsRef<KeyBytes>, TVal: Clone,

Returns an iterator over the nodes closest to the target key, ordered by increasing distance.

source

pub fn count_nodes_between<T>(&mut self, target: &T) -> usizewhere T: AsRef<KeyBytes>,

Counts the number of nodes between the local node and the node closest to target.

The number of nodes between the local node and the target are calculated by backtracking from the target towards the local key.

Trait Implementations§

source§

impl<TKey: Clone, TVal: Clone> Clone for KBucketsTable<TKey, TVal>

source§

fn clone(&self) -> KBucketsTable<TKey, TVal>

Returns a copy 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<TKey: Debug, TVal: Debug> Debug for KBucketsTable<TKey, TVal>

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<TKey, TVal> RefUnwindSafe for KBucketsTable<TKey, TVal>where TKey: RefUnwindSafe, TVal: RefUnwindSafe,

§

impl<TKey, TVal> Send for KBucketsTable<TKey, TVal>where TKey: Send, TVal: Send,

§

impl<TKey, TVal> Sync for KBucketsTable<TKey, TVal>where TKey: Sync, TVal: Sync,

§

impl<TKey, TVal> Unpin for KBucketsTable<TKey, TVal>where TKey: Unpin, TVal: Unpin,

§

impl<TKey, TVal> UnwindSafe for KBucketsTable<TKey, TVal>where TKey: UnwindSafe, TVal: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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<T> for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for Twhere T: Clone,

§

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 Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V