pub struct StoreLayer { /* private fields */ }Expand description
A layer that keeps track of the store it came out of, allowing the creation of a layer builder on top of this layer.
This type of layer supports querying what was added and what was removed in this layer. This can not be done in general, because the layer that has been loaded may not be the layer that was originally built. This happens whenever a rollup is done. A rollup will create a new layer that bundles the changes of various layers. It allows for more efficient querying, but loses the ability to do these delta queries directly. In order to support them anyway, the StoreLayer will dynamically load in the relevant files to perform the requested addition or removal query method.
Implementations§
Source§impl StoreLayer
impl StoreLayer
Sourcepub async fn open_write(&self) -> Result<StoreLayerBuilder>
pub async fn open_write(&self) -> Result<StoreLayerBuilder>
Create a layer builder based on this layer.
Examples found in repository?
54async fn process_commands(store_path: &str, graph: &str) -> io::Result<()> {
55 let store = open_directory_store(store_path);
56 let graph = store
57 .open(graph)
58 .await?
59 .expect(&format!("expected graph {} to exist", graph));
60
61 // There are two types of builders. One creates a new base layer,
62 // which has no parent. The other creates a child layer, which has
63 // another layer as its parent.
64 let builder = match graph.head().await? {
65 Some(layer) => layer.open_write().await?,
66 None => store.create_base_layer().await?,
67 };
68 let mut stdin = io::BufReader::new(io::stdin()).lines();
69
70 while let Some(line) = stdin.next_line().await? {
71 let segment = line.trim();
72 if segment.len() == 0 {
73 continue;
74 }
75
76 let command = parse_command(segment).await?;
77
78 // add all the input data into the builder.
79 // The builder keeps an in-memory list of added and removed
80 // triples. If the same triple is added and removed on the
81 // same builder, it is a no-op. This is even the case when it
82 // is then later re-added on the same builder.
83 //
84 // Since no io is happening, adding triples to the builder is
85 // not a future.
86 match command {
87 Command::Add(triple) => builder.add_value_triple(triple)?,
88 Command::Remove(triple) => builder.remove_value_triple(triple)?,
89 }
90 }
91
92 // When commit is called, the builder writes its data to
93 // persistent storage.
94 let layer = builder.commit().await?;
95
96 // While a layer exists now, it's not yet attached to anything,
97 // and is therefore unusable unless you know the exact identifier
98 // of the layer itself. To make this the graph data, we have to
99 // set the grap head to this layer.
100 graph.set_head(&layer).await?;
101
102 println!(
103 "Added: {}, removed: {}",
104 layer.triple_layer_addition_count().await?,
105 layer.triple_layer_removal_count().await?
106 );
107
108 Ok(())
109}Sourcepub async fn parent(&self) -> Result<Option<StoreLayer>>
pub async fn parent(&self) -> Result<Option<StoreLayer>>
Returns the parent of this layer, if any, or None if this layer has no parent.
pub async fn squash_upto(&self, upto: &StoreLayer) -> Result<StoreLayer>
Sourcepub async fn squash(&self) -> Result<StoreLayer>
pub async fn squash(&self) -> Result<StoreLayer>
Create a new base layer consisting of all triples in this layer, as well as all its ancestors.
It is a good idea to keep layer stacks small, meaning, to only have a handful of ancestors for a layer. The more layers there are, the longer queries take. Squash is one approach of accomplishing this. Rollup is another. Squash is the better option if you do not care for history, as it throws away all data that you no longer need.
Sourcepub async fn rollup(&self) -> Result<()>
pub async fn rollup(&self) -> Result<()>
Create a new rollup layer which rolls up all triples in this layer, as well as all its ancestors.
It is a good idea to keep layer stacks small, meaning, to only have a handful of ancestors for a layer. The more layers there are, the longer queries take. Rollup is one approach of accomplishing this. Squash is another. Rollup is the better option if you need to retain history.
Sourcepub async fn rollup_upto(&self, upto: &StoreLayer) -> Result<()>
pub async fn rollup_upto(&self, upto: &StoreLayer) -> Result<()>
Create a new rollup layer which rolls up all triples in this layer, as well as all ancestors up to (but not including) the given ancestor.
It is a good idea to keep layer stacks small, meaning, to only have a handful of ancestors for a layer. The more layers there are, the longer queries take. Rollup is one approach of accomplishing this. Squash is another. Rollup is the better option if you need to retain history.
Sourcepub async fn imprecise_rollup_upto(&self, upto: &StoreLayer) -> Result<()>
pub async fn imprecise_rollup_upto(&self, upto: &StoreLayer) -> Result<()>
Like rollup_upto, rolls up upto the given layer. However, if this layer is a rollup layer, this will roll up upto that rollup.
Sourcepub async fn triple_addition_exists(
&self,
subject: u64,
predicate: u64,
object: u64,
) -> Result<bool>
pub async fn triple_addition_exists( &self, subject: u64, predicate: u64, object: u64, ) -> Result<bool>
Returns a future that yields true if this triple has been added in this layer, or false if it doesn’t.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Sourcepub async fn triple_removal_exists(
&self,
subject: u64,
predicate: u64,
object: u64,
) -> Result<bool>
pub async fn triple_removal_exists( &self, subject: u64, predicate: u64, object: u64, ) -> Result<bool>
Returns a future that yields true if this triple has been removed in this layer, or false if it doesn’t.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Sourcepub async fn triple_additions(
&self,
) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
pub async fn triple_additions( &self, ) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
Returns a future that yields an iterator over all layer additions.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Sourcepub async fn triple_removals(
&self,
) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
pub async fn triple_removals( &self, ) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
Returns a future that yields an iterator over all layer removals.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Sourcepub async fn triple_additions_s(
&self,
subject: u64,
) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
pub async fn triple_additions_s( &self, subject: u64, ) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
Returns a future that yields an iterator over all layer additions that share a particular subject.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Sourcepub async fn triple_removals_s(
&self,
subject: u64,
) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
pub async fn triple_removals_s( &self, subject: u64, ) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
Returns a future that yields an iterator over all layer removals that share a particular subject.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Sourcepub async fn triple_additions_sp(
&self,
subject: u64,
predicate: u64,
) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
pub async fn triple_additions_sp( &self, subject: u64, predicate: u64, ) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
Returns a future that yields an iterator over all layer additions that share a particular subject and predicate.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Sourcepub async fn triple_removals_sp(
&self,
subject: u64,
predicate: u64,
) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
pub async fn triple_removals_sp( &self, subject: u64, predicate: u64, ) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
Returns a future that yields an iterator over all layer removals that share a particular subject and predicate.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Sourcepub async fn triple_additions_p(
&self,
predicate: u64,
) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
pub async fn triple_additions_p( &self, predicate: u64, ) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
Returns a future that yields an iterator over all layer additions that share a particular predicate.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Sourcepub async fn triple_removals_p(
&self,
predicate: u64,
) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
pub async fn triple_removals_p( &self, predicate: u64, ) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
Returns a future that yields an iterator over all layer removals that share a particular predicate.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Sourcepub async fn triple_additions_o(
&self,
object: u64,
) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
pub async fn triple_additions_o( &self, object: u64, ) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
Returns a future that yields an iterator over all layer additions that share a particular object.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Sourcepub async fn triple_removals_o(
&self,
object: u64,
) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
pub async fn triple_removals_o( &self, object: u64, ) -> Result<Box<dyn Iterator<Item = IdTriple> + Send>>
Returns a future that yields an iterator over all layer removals that share a particular object.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Sourcepub async fn triple_layer_addition_count(&self) -> Result<usize>
pub async fn triple_layer_addition_count(&self) -> Result<usize>
Returns a future that yields the amount of triples that this layer adds.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Examples found in repository?
54async fn process_commands(store_path: &str, graph: &str) -> io::Result<()> {
55 let store = open_directory_store(store_path);
56 let graph = store
57 .open(graph)
58 .await?
59 .expect(&format!("expected graph {} to exist", graph));
60
61 // There are two types of builders. One creates a new base layer,
62 // which has no parent. The other creates a child layer, which has
63 // another layer as its parent.
64 let builder = match graph.head().await? {
65 Some(layer) => layer.open_write().await?,
66 None => store.create_base_layer().await?,
67 };
68 let mut stdin = io::BufReader::new(io::stdin()).lines();
69
70 while let Some(line) = stdin.next_line().await? {
71 let segment = line.trim();
72 if segment.len() == 0 {
73 continue;
74 }
75
76 let command = parse_command(segment).await?;
77
78 // add all the input data into the builder.
79 // The builder keeps an in-memory list of added and removed
80 // triples. If the same triple is added and removed on the
81 // same builder, it is a no-op. This is even the case when it
82 // is then later re-added on the same builder.
83 //
84 // Since no io is happening, adding triples to the builder is
85 // not a future.
86 match command {
87 Command::Add(triple) => builder.add_value_triple(triple)?,
88 Command::Remove(triple) => builder.remove_value_triple(triple)?,
89 }
90 }
91
92 // When commit is called, the builder writes its data to
93 // persistent storage.
94 let layer = builder.commit().await?;
95
96 // While a layer exists now, it's not yet attached to anything,
97 // and is therefore unusable unless you know the exact identifier
98 // of the layer itself. To make this the graph data, we have to
99 // set the grap head to this layer.
100 graph.set_head(&layer).await?;
101
102 println!(
103 "Added: {}, removed: {}",
104 layer.triple_layer_addition_count().await?,
105 layer.triple_layer_removal_count().await?
106 );
107
108 Ok(())
109}Sourcepub async fn triple_layer_removal_count(&self) -> Result<usize>
pub async fn triple_layer_removal_count(&self) -> Result<usize>
Returns a future that yields the amount of triples that this layer removes.
Since this operation will involve io when this layer is a rollup layer, io errors may occur.
Examples found in repository?
54async fn process_commands(store_path: &str, graph: &str) -> io::Result<()> {
55 let store = open_directory_store(store_path);
56 let graph = store
57 .open(graph)
58 .await?
59 .expect(&format!("expected graph {} to exist", graph));
60
61 // There are two types of builders. One creates a new base layer,
62 // which has no parent. The other creates a child layer, which has
63 // another layer as its parent.
64 let builder = match graph.head().await? {
65 Some(layer) => layer.open_write().await?,
66 None => store.create_base_layer().await?,
67 };
68 let mut stdin = io::BufReader::new(io::stdin()).lines();
69
70 while let Some(line) = stdin.next_line().await? {
71 let segment = line.trim();
72 if segment.len() == 0 {
73 continue;
74 }
75
76 let command = parse_command(segment).await?;
77
78 // add all the input data into the builder.
79 // The builder keeps an in-memory list of added and removed
80 // triples. If the same triple is added and removed on the
81 // same builder, it is a no-op. This is even the case when it
82 // is then later re-added on the same builder.
83 //
84 // Since no io is happening, adding triples to the builder is
85 // not a future.
86 match command {
87 Command::Add(triple) => builder.add_value_triple(triple)?,
88 Command::Remove(triple) => builder.remove_value_triple(triple)?,
89 }
90 }
91
92 // When commit is called, the builder writes its data to
93 // persistent storage.
94 let layer = builder.commit().await?;
95
96 // While a layer exists now, it's not yet attached to anything,
97 // and is therefore unusable unless you know the exact identifier
98 // of the layer itself. To make this the graph data, we have to
99 // set the grap head to this layer.
100 graph.set_head(&layer).await?;
101
102 println!(
103 "Added: {}, removed: {}",
104 layer.triple_layer_addition_count().await?,
105 layer.triple_layer_removal_count().await?
106 );
107
108 Ok(())
109}Trait Implementations§
Source§impl Clone for StoreLayer
impl Clone for StoreLayer
Source§fn clone(&self) -> StoreLayer
fn clone(&self) -> StoreLayer
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Eq for StoreLayer
Source§impl Layer for StoreLayer
impl Layer for StoreLayer
fn parent_name(&self) -> Option<[u32; 5]>
Source§fn node_and_value_count(&self) -> usize
fn node_and_value_count(&self) -> usize
Source§fn predicate_count(&self) -> usize
fn predicate_count(&self) -> usize
Source§fn subject_id(&self, subject: &str) -> Option<u64>
fn subject_id(&self, subject: &str) -> Option<u64>
Source§fn predicate_id(&self, predicate: &str) -> Option<u64>
fn predicate_id(&self, predicate: &str) -> Option<u64>
Source§fn object_node_id(&self, object: &str) -> Option<u64>
fn object_node_id(&self, object: &str) -> Option<u64>
Source§fn object_value_id(&self, object: &TypedDictEntry) -> Option<u64>
fn object_value_id(&self, object: &TypedDictEntry) -> Option<u64>
Source§fn id_subject(&self, id: u64) -> Option<String>
fn id_subject(&self, id: u64) -> Option<String>
Source§fn id_predicate(&self, id: u64) -> Option<String>
fn id_predicate(&self, id: u64) -> Option<String>
Source§fn id_object(&self, id: u64) -> Option<ObjectType>
fn id_object(&self, id: u64) -> Option<ObjectType>
Source§fn id_object_is_node(&self, id: u64) -> Option<bool>
fn id_object_is_node(&self, id: u64) -> Option<bool>
Source§fn triple_exists(&self, subject: u64, predicate: u64, object: u64) -> bool
fn triple_exists(&self, subject: u64, predicate: u64, object: u64) -> bool
Source§fn triples(&self) -> Box<dyn Iterator<Item = IdTriple> + Send>
fn triples(&self) -> Box<dyn Iterator<Item = IdTriple> + Send>
fn triples_s(&self, subject: u64) -> Box<dyn Iterator<Item = IdTriple> + Send>
fn triples_sp( &self, subject: u64, predicate: u64, ) -> Box<dyn Iterator<Item = IdTriple> + Send>
fn triples_p(&self, predicate: u64) -> Box<dyn Iterator<Item = IdTriple> + Send>
fn triples_o(&self, object: u64) -> Box<dyn Iterator<Item = IdTriple> + Send>
Source§fn clone_boxed(&self) -> Box<dyn Layer>
fn clone_boxed(&self) -> Box<dyn Layer>
Source§fn triple_addition_count(&self) -> usize
fn triple_addition_count(&self) -> usize
Source§fn triple_removal_count(&self) -> usize
fn triple_removal_count(&self) -> usize
Source§fn all_counts(&self) -> LayerCounts
fn all_counts(&self) -> LayerCounts
fn single_triple_sp(&self, subject: u64, predicate: u64) -> Option<IdTriple>
Source§fn id_object_node(&self, id: u64) -> Option<String>
fn id_object_node(&self, id: u64) -> Option<String>
Source§fn id_object_value(&self, id: u64) -> Option<TypedDictEntry>
fn id_object_value(&self, id: u64) -> Option<TypedDictEntry>
Source§fn id_object_is_value(&self, id: u64) -> Option<bool>
fn id_object_is_value(&self, id: u64) -> Option<bool>
Source§fn id_triple_exists(&self, triple: IdTriple) -> bool
fn id_triple_exists(&self, triple: IdTriple) -> bool
Source§fn value_triple_exists(&self, triple: &ValueTriple) -> bool
fn value_triple_exists(&self, triple: &ValueTriple) -> bool
Source§fn value_triple_to_id(&self, triple: &ValueTriple) -> Option<IdTriple>
fn value_triple_to_id(&self, triple: &ValueTriple) -> Option<IdTriple>
ValueTriple to an IdTriple, returning None if any of the strings in the triple could not be resolved.Source§fn value_triple_to_partially_resolved(
&self,
triple: ValueTriple,
) -> PartiallyResolvedTriple
fn value_triple_to_partially_resolved( &self, triple: ValueTriple, ) -> PartiallyResolvedTriple
Source§fn id_triple_to_string(&self, triple: &IdTriple) -> Option<ValueTriple>
fn id_triple_to_string(&self, triple: &IdTriple) -> Option<ValueTriple>
Source§fn triple_count(&self) -> usize
fn triple_count(&self) -> usize
Source§impl PartialEq for StoreLayer
impl PartialEq for StoreLayer
Source§fn eq(&self, other: &StoreLayer) -> bool
fn eq(&self, other: &StoreLayer) -> bool
self and other values to be equal, and is used by ==.Auto Trait Implementations§
impl !RefUnwindSafe for StoreLayer
impl !UnwindSafe for StoreLayer
impl Freeze for StoreLayer
impl Send for StoreLayer
impl Sync for StoreLayer
impl Unpin for StoreLayer
impl UnsafeUnpin for StoreLayer
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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,
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,
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,
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,
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,
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,
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,
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,
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>
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>
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> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Source§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,
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,
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,
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
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
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
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Source§impl<T> StrictAs for T
impl<T> StrictAs for T
Source§fn strict_as<Dst>(self) -> Dstwhere
T: StrictCast<Dst>,
fn strict_as<Dst>(self) -> Dstwhere
T: StrictCast<Dst>,
Source§impl<Src, Dst> StrictCastFrom<Src> for Dstwhere
Src: StrictCast<Dst>,
impl<Src, Dst> StrictCastFrom<Src> for Dstwhere
Src: StrictCast<Dst>,
Source§fn strict_cast_from(src: Src) -> Dst
fn strict_cast_from(src: Src) -> Dst
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
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
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
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
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
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
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
.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
.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
.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
.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
.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
.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
.tap_deref() only in debug builds, and is erased in release
builds.