pub struct Node<K, V, H = Hasher>{ /* private fields */ }
Expand description
Represents a node in the HAMT tree structure.
§Examples
use std::sync::Arc;
use wnfs_hamt::Node;
use wnfs_common::MemoryBlockStore;
let store = &MemoryBlockStore::new();
let node = Arc::new(Node::<String, usize>::default());
assert!(node.is_empty());
Implementations§
Source§impl<K, V, H> Node<K, V, H>
impl<K, V, H> Node<K, V, H>
Sourcepub async fn set(
self: &mut Arc<Self>,
key: K,
value: V,
store: &impl BlockStore,
) -> Result<()>where
K: Storable + AsRef<[u8]> + Clone,
V: Storable + Clone,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
pub async fn set(
self: &mut Arc<Self>,
key: K,
value: V,
store: &impl BlockStore,
) -> Result<()>where
K: Storable + AsRef<[u8]> + Clone,
V: Storable + Clone,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
Sets a new value at the given key.
§Examples
use std::sync::Arc;
use wnfs_hamt::Node;
use wnfs_common::MemoryBlockStore;
#[async_std::main]
async fn main() {
let store = &MemoryBlockStore::new();
let mut node = Arc::new(Node::<String, usize>::default());
node.set("key".into(), 42, store).await.unwrap();
assert_eq!(node.get(&String::from("key"), store).await.unwrap(), Some(&42));
}
Sourcepub async fn get<'a>(
&'a self,
key: &K,
store: &impl BlockStore,
) -> Result<Option<&'a V>>where
K: Storable + AsRef<[u8]>,
V: Storable,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
pub async fn get<'a>(
&'a self,
key: &K,
store: &impl BlockStore,
) -> Result<Option<&'a V>>where
K: Storable + AsRef<[u8]>,
V: Storable,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
Gets the value at the given key.
§Examples
use std::sync::Arc;
use wnfs_hamt::Node;
use wnfs_common::MemoryBlockStore;
#[async_std::main]
async fn main() {
let store = &MemoryBlockStore::new();
let mut node = Arc::new(Node::<String, usize>::default());
node.set("key".into(), 42, store).await.unwrap();
assert_eq!(node.get(&String::from("key"), store).await.unwrap(), Some(&42));
}
Sourcepub async fn get_mut<'a>(
self: &'a mut Arc<Self>,
key: &K,
store: &'a impl BlockStore,
) -> Result<Option<&'a mut V>>where
K: Storable + AsRef<[u8]> + Clone,
V: Storable + Clone,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
pub async fn get_mut<'a>(
self: &'a mut Arc<Self>,
key: &K,
store: &'a impl BlockStore,
) -> Result<Option<&'a mut V>>where
K: Storable + AsRef<[u8]> + Clone,
V: Storable + Clone,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
Obtain a mutable reference to a given key.
Will copy parts of the tree to prepare for changes, if necessary.
§Examples
use std::sync::Arc;
use wnfs_hamt::Node;
use wnfs_common::MemoryBlockStore;
#[async_std::main]
async fn main() {
let store = &mut MemoryBlockStore::new();
let mut node = Arc::new(Node::<String, usize>::default());
node.set("key".into(), 40, store).await.unwrap();
let value = node.get_mut(&String::from("key"), store).await.unwrap().unwrap();
*value += 2;
assert_eq!(node.get(&String::from("key"), store).await.unwrap(), Some(&42));
}
Sourcepub async fn remove(
self: &mut Arc<Self>,
key: &K,
store: &impl BlockStore,
) -> Result<Option<Pair<K, V>>>where
K: Storable + AsRef<[u8]> + Clone,
V: Storable + Clone,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
pub async fn remove(
self: &mut Arc<Self>,
key: &K,
store: &impl BlockStore,
) -> Result<Option<Pair<K, V>>>where
K: Storable + AsRef<[u8]> + Clone,
V: Storable + Clone,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
Removes the value at the given key.
§Examples
use std::sync::Arc;
use wnfs_hamt::{Node, Pair};
use wnfs_common::MemoryBlockStore;
#[async_std::main]
async fn main() {
let store = &MemoryBlockStore::new();
let mut node = Arc::new(Node::<String, usize>::default());
node.set("key".into(), 42, store).await.unwrap();
assert_eq!(node.get(&String::from("key"), store).await.unwrap(), Some(&42));
let value = node.remove(&String::from("key"), store).await.unwrap();
assert_eq!(value, Some(Pair::new("key".into(), 42)));
assert_eq!(node.get(&String::from("key"), store).await.unwrap(), None);
}
Sourcepub async fn get_by_hash<'a>(
&'a self,
hash: &HashOutput,
store: &impl BlockStore,
) -> Result<Option<&'a V>>where
K: Storable + AsRef<[u8]>,
V: Storable,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
pub async fn get_by_hash<'a>(
&'a self,
hash: &HashOutput,
store: &impl BlockStore,
) -> Result<Option<&'a V>>where
K: Storable + AsRef<[u8]>,
V: Storable,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
Gets the value at the key matching the provided hash.
§Examples
use std::sync::Arc;
use wnfs_hamt::{Node, Hasher};
use wnfs_common::MemoryBlockStore;
#[async_std::main]
async fn main() {
let store = &MemoryBlockStore::new();
let mut node = Arc::new(Node::<String, usize>::default());
node.set("key".into(), 42, store).await.unwrap();
let key_hash = &blake3::Hasher::hash(&String::from("key"));
assert_eq!(node.get_by_hash(key_hash, store).await.unwrap(), Some(&42));
}
Sourcepub async fn remove_by_hash(
self: &mut Arc<Self>,
hash: &HashOutput,
store: &impl BlockStore,
) -> Result<Option<Pair<K, V>>>where
K: Storable + AsRef<[u8]> + Clone,
V: Storable + Clone,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
pub async fn remove_by_hash(
self: &mut Arc<Self>,
hash: &HashOutput,
store: &impl BlockStore,
) -> Result<Option<Pair<K, V>>>where
K: Storable + AsRef<[u8]> + Clone,
V: Storable + Clone,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
Removes the value at the key matching the provided hash.
§Examples
use std::sync::Arc;
use wnfs_hamt::{Node, Hasher, Pair};
use wnfs_common::MemoryBlockStore;
#[async_std::main]
async fn main() {
let store = &MemoryBlockStore::new();
let mut node = Arc::new(Node::<String, usize>::default());
node.set("key".into(), 42, store).await.unwrap();
assert_eq!(node.get(&String::from("key"), store).await.unwrap(), Some(&42));
let key_hash = &blake3::Hasher::hash(&String::from("key"));
let value = node.remove_by_hash(key_hash, store).await.unwrap();
assert_eq!(value, Some(Pair::new("key".into(), 42)));
assert_eq!(node.get(&String::from("key"), store).await.unwrap(), None);
}
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Checks if the node is empty.
§Examples
use std::sync::Arc;
use wnfs_hamt::Node;
use wnfs_common::MemoryBlockStore;
#[async_std::main]
async fn main() {
let store = &MemoryBlockStore::new();
let mut node = Arc::new(Node::<String, usize>::default());
assert!(node.is_empty());
node.set("key".into(), 42, store).await.unwrap();
assert!(!node.is_empty());
}
pub fn set_value<'a>(
self: &'a mut Arc<Self>,
hashnibbles: &'a mut HashNibbles<'_>,
key: K,
value: V,
store: &'a impl BlockStore,
) -> BoxFuture<'a, Result<()>>where
K: Storable + Clone + AsRef<[u8]> + 'a,
V: Storable + Clone + 'a,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
pub fn get_value<'a, 'life0, 'life1, 'async_recursion>(
&'a self,
hashnibbles: &'life0 mut HashNibbles<'_>,
store: &'life1 impl BlockStore,
) -> Pin<Box<dyn Future<Output = Result<Option<&'a Pair<K, V>>>> + Send + 'async_recursion>>where
K: Storable + AsRef<[u8]>,
V: Storable,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
'life0: 'async_recursion,
'life1: 'async_recursion,
'a: 'async_recursion,
pub fn get_value_mut<'a, 'life0, 'async_recursion>(
self: &'a mut Arc<Self>,
hashnibbles: &'life0 mut HashNibbles<'_>,
store: &'a impl BlockStore,
) -> Pin<Box<dyn Future<Output = Result<Option<&'a mut Pair<K, V>>>> + Send + 'async_recursion>>where
K: Storable + AsRef<[u8]> + Clone,
V: Storable + Clone,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
'life0: 'async_recursion,
'a: 'async_recursion,
pub fn remove_value<'a>(
self: &'a mut Arc<Self>,
hashnibbles: &'a mut HashNibbles<'_>,
store: &'a impl BlockStore,
) -> BoxFuture<'a, Result<Option<Pair<K, V>>>>where
K: Storable + AsRef<[u8]> + Clone + 'a,
V: Storable + Clone + 'a,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
Sourcepub fn flat_map<'life0, 'life1, 'life_self, 'async_recursion, F, T>(
&'life_self self,
f: &'life0 F,
store: &'life1 impl BlockStore,
) -> Pin<Box<dyn Future<Output = Result<Vec<T>>> + Send + 'async_recursion>>where
F: Fn(&Pair<K, V>) -> Result<T> + CondSync + 'async_recursion,
K: Storable + AsRef<[u8]>,
V: Storable,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
T: CondSend + 'async_recursion,
'life0: 'async_recursion,
'life1: 'async_recursion,
'life_self: 'async_recursion,
pub fn flat_map<'life0, 'life1, 'life_self, 'async_recursion, F, T>(
&'life_self self,
f: &'life0 F,
store: &'life1 impl BlockStore,
) -> Pin<Box<dyn Future<Output = Result<Vec<T>>> + Send + 'async_recursion>>where
F: Fn(&Pair<K, V>) -> Result<T> + CondSync + 'async_recursion,
K: Storable + AsRef<[u8]>,
V: Storable,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
T: CondSend + 'async_recursion,
'life0: 'async_recursion,
'life1: 'async_recursion,
'life_self: 'async_recursion,
Visits all the leaf nodes in the trie and calls the given function on each of them.
§Examples
use std::sync::Arc;
use wnfs_hamt::{Node, Pair, Hasher};
use wnfs_common::{utils, MemoryBlockStore};
#[async_std::main]
async fn main() {
let store = &MemoryBlockStore::new();
let mut node = Arc::new(Node::<[u8; 4], String>::default());
for i in 0..99_u32 {
node
.set(i.to_le_bytes(), i.to_string(), store)
.await
.unwrap();
}
let keys = node
.flat_map(&|Pair { key, .. }| Ok(*key), store)
.await
.unwrap();
assert_eq!(keys.len(), 99);
}
Sourcepub fn get_node_at<'a, 'life0, 'life1, 'async_recursion>(
&'a self,
hashprefix: &'life0 HashPrefix,
store: &'life1 impl BlockStore,
) -> Pin<Box<dyn Future<Output = Result<Option<Either<&'a Pair<K, V>, &'a Arc<Self>>>>> + Send + 'async_recursion>>where
K: Storable + AsRef<[u8]>,
V: Storable,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
'life0: 'async_recursion,
'life1: 'async_recursion,
'a: 'async_recursion,
pub fn get_node_at<'a, 'life0, 'life1, 'async_recursion>(
&'a self,
hashprefix: &'life0 HashPrefix,
store: &'life1 impl BlockStore,
) -> Pin<Box<dyn Future<Output = Result<Option<Either<&'a Pair<K, V>, &'a Arc<Self>>>>> + Send + 'async_recursion>>where
K: Storable + AsRef<[u8]>,
V: Storable,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
'life0: 'async_recursion,
'life1: 'async_recursion,
'a: 'async_recursion,
Given a hashprefix representing the path to a node in the trie. This function will return the key-value pair or the intermediate node that the hashprefix points to.
§Examples
use std::sync::Arc;
use wnfs_hamt::{Node, HashPrefix, Hasher};
use wnfs_common::{MemoryBlockStore, utils};
#[async_std::main]
async fn main() {
let store = &MemoryBlockStore::new();
let mut node = Arc::new(Node::<[u8; 4], String>::default());
for i in 0..100_u32 {
node
.set(i.to_le_bytes(), i.to_string(), store)
.await
.unwrap();
}
let hashprefix = HashPrefix::with_length(utils::to_hash_output(&[0x8C]), 2);
let result = node.get_node_at(&hashprefix, store).await.unwrap();
println!("Result: {:#?}", result);
}
Sourcepub async fn to_hashmap<B: BlockStore>(
&self,
store: &B,
) -> Result<HashMap<K, V>>where
K: Storable + AsRef<[u8]> + Clone + Eq + Hash,
V: Storable + Clone,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
pub async fn to_hashmap<B: BlockStore>(
&self,
store: &B,
) -> Result<HashMap<K, V>>where
K: Storable + AsRef<[u8]> + Clone + Eq + Hash,
V: Storable + Clone,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
Generates a hashmap from the node.
§Examples
use std::sync::Arc;
use wnfs_hamt::{Node, Hasher};
use wnfs_common::MemoryBlockStore;
#[async_std::main]
async fn main() {
let store = &MemoryBlockStore::new();
let mut node = Arc::new(Node::<[u8; 4], String>::default());
for i in 0..100_u32 {
node
.set(i.to_le_bytes(), i.to_string(), store)
.await
.unwrap();
}
let map = node.to_hashmap(store).await.unwrap();
assert_eq!(map.len(), 100);
}
Sourcepub fn count_values(self: &Arc<Self>) -> Result<usize>
pub fn count_values(self: &Arc<Self>) -> Result<usize>
Returns the count of the values in all the values pointer of a node.
Trait Implementations§
Source§impl<K, V, H> PartialEq for Node<K, V, H>where
K: Storable + PartialEq + CondSync,
V: Storable + PartialEq + CondSync,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
H: Hasher + CondSync,
impl<K, V, H> PartialEq for Node<K, V, H>where
K: Storable + PartialEq + CondSync,
V: Storable + PartialEq + CondSync,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
H: Hasher + CondSync,
Source§impl<K, V, H> Storable for Node<K, V, H>where
K: Storable + CondSync,
V: Storable + CondSync,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
H: Hasher + CondSync,
impl<K, V, H> Storable for Node<K, V, H>where
K: Storable + CondSync,
V: Storable + CondSync,
K::Serializable: Serialize + DeserializeOwned,
V::Serializable: Serialize + DeserializeOwned,
H: Hasher + CondSync,
Source§type Serializable = NodeSerializable<<K as Storable>::Serializable, <V as Storable>::Serializable>
type Serializable = NodeSerializable<<K as Storable>::Serializable, <V as Storable>::Serializable>
The at-rest representation of this storable type.
Source§async fn to_serializable(
&self,
store: &impl BlockStore,
) -> Result<Self::Serializable>
async fn to_serializable( &self, store: &impl BlockStore, ) -> Result<Self::Serializable>
Turn the current type into the at-rest representation of this type.
Source§async fn from_serializable(
cid: Option<&Cid>,
serializable: Self::Serializable,
) -> Result<Self>
async fn from_serializable( cid: Option<&Cid>, serializable: Self::Serializable, ) -> Result<Self>
Take an at-rest representation of this type and turn it into the in-memory representation.
You can use the
cid
parameter to populate a cache.Source§fn persisted_as(&self) -> Option<&OnceCell<Cid>>
fn persisted_as(&self) -> Option<&OnceCell<Cid>>
Return a serialization cache, if it exists.
By default, this always returns
None
.Auto Trait Implementations§
impl<K, V, H = Hasher> !Freeze for Node<K, V, H>
impl<K, V, H> RefUnwindSafe for Node<K, V, H>
impl<K, V, H> Send for Node<K, V, H>
impl<K, V, H> Sync for Node<K, V, H>
impl<K, V, H> Unpin for Node<K, V, H>
impl<K, V, H> UnwindSafe for Node<K, V, H>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
Borrows
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
Mutably borrows
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self
, then passes self.deref()
into the pipe function.Source§impl<T> References<RawCodec> for T
impl<T> References<RawCodec> for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
Calls
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
Calls
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref()
only in debug builds, and is erased in release
builds.