Skip to main content

ImmutableCsr

Struct ImmutableCsr 

Source
pub struct ImmutableCsr { /* private fields */ }
Expand description

Packed immutable adjacency of one group.

hot_entries/cold_entries hold every row back to back in row order, each row sorted by (endpoint, rank, edge_id); degrees[row] is the row length and offsets[row] its start inside the halves. Empty rows contribute no slots. offsets is memory-only state rebuilt by packing and by loading.

values/valid carry the bundled inline value column slot-parallel to the packed halves when the group was packed from a valued bundled group; otherwise both stay empty and every value reads as NULL.

Implementations§

Source§

impl ImmutableCsr

Source

pub fn iter(&self, ts: u64) -> ImmutableCsrIterator<'_> ⓘ

Iterate timestamp-visible entries across all rows.

Source

pub fn iter_edges_of(&self, src_vid: u32, ts: u64) -> FrozenRowIter<'_> ⓘ

Iterate timestamp-visible entries of one row without allocating.

Zero-copy counterpart of edges_of: walks the packed hot slice and assembles each record with its cold half inline, so per-vertex scans over frozen groups never touch the allocator. Out-of-range rows yield an empty iterator.

Source

pub fn iter_all(&self) -> ImmutableCsrIterator<'_> ⓘ

Iterate every physically stored entry, including tombstoned ones.

Source§

impl ImmutableCsr

Source

pub fn compact_with_cutoff( &mut self, cutoff: u64, on_edge_removed: &mut dyn FnMut(EdgeId, u64), ) -> usize

Drop GC-eligible tombstones in place without unfreezing.

Rows stay sorted because filtering preserves order; degrees, offsets and the packed halves are rebuilt tight with no reserved gaps. Live entries are untouched, so the live edge count does not change. Each dropped entry is reported through on_edge_removed for tombstone accounting above this layer.

Source

pub fn compact_rows_batched( &mut self, vids: &[u32], cutoff: u64, on_edge_removed: &mut dyn FnMut(EdgeId, u64), ) -> usize

Reclaim a set of rows in one linear pass without unfreezing.

Production replacement for repeated compact_row calls: one filter over the packed halves plus one offset rebuild reclaims any number of rows for a single table-proportional cost instead of one trailing memmove per row. Rows outside vids are carried verbatim; listed rows drop only cutoff-eligible tombstones and keep sorted order. An empty or maximum-cutoff request compacts nothing. Reported removals arrive in row order.

Source§

impl ImmutableCsr

Source

pub fn new() -> ImmutableCsr

Empty table with no rows.

Source

pub fn clear(&mut self)

Drop every entry, keeping no rows.

Source

pub fn vertex_capacity(&self) -> usize

Row count of the packed table.

Source

pub fn edge_count(&self) -> u64

Live edge count of the packed table.

Source

pub fn pack_from_mutable(csr: &MutableCsr) -> ImmutableCsr

Pack every physical entry of a mutable CSR, primary rows and overflow chains merged per row, then sorted into frozen row order.

Content-preserving up to logical equivalence: tombstones travel verbatim, reserved-slot gap sentinels are dropped, and rows are sorted by (endpoint, rank, edge_id). Timestamp-filtered reads observe the same logical entries as the source table.

Source

pub fn pack_single_from(csr: &SingleMutableCsr) -> ImmutableCsr

Pack every physical entry of a single-edge CSR, sorted the same way.

Rows hold at most one entry; the packed form is uniform with the multi-edge pack so one frozen type serves both strategies.

Source

pub fn pack_from_pure(csr: &PureTopologyCsr) -> ImmutableCsr

Pack a pure-topology group directly into the frozen layout.

Same sorted content as routing through a temporary mutable table, without the full copy and without fabricating timestamp replicas. Pure rows carry no timestamps and no tombstones: every physically stored entry is live, so the pack walks the topology only.

Source

pub fn pack_from_bundled(csr: &BundledCsr) -> ImmutableCsr

Pack a bundled group together with its inline values.

Same sorted content as the topology-only pack, with the value column carried slot-parallel in row order: a NULL slot stores a zero word with a cleared validity bit, mirroring the bundled layout. Freezing a valued bundled group therefore preserves its properties; unfreezing replays them back through the regular valued insert entry.

Source§

impl ImmutableCsr

Source

pub fn used_memory_size(&self) -> usize

Approximate memory usage in bytes.

Source

pub fn topology_encoding_report( &self, ) -> Vec<(String, TopologyColumnEncoding, usize, usize)>

Encoding report for the persisted neighbor columns.

Source

pub fn dump(&self) -> Vec<u8> ⓘ

Dump to bytes.

Format:

  • rows (u64)
  • edge_count (u64)
  • entries_len (u64)
  • encoded degrees column
  • encoded endpoints column
  • encoded ranks column
  • encoded edge ids column
  • encoded delete stamps column
  • has_values flag (u64, 0 or 1)
  • encoded value words column (present only when the flag is set)
  • validity byte count (u64) plus raw validity bytes (flag set only)

Groups packed from non-bundled sources carry no value columns and store a zero flag. Row offsets are memory-only and never persisted; load rebuilds them.

Source

pub fn dump_into(&self, out: &mut Vec<u8>)

Borrow-based dump into out without an intermediate owned buffer.

Source

pub fn dump_into_with_scratch( &self, out: &mut Vec<u8>, scratch: &mut CsrDumpScratch, )

Dump reusing caller-owned column buffers.

Same bytes as Self::dump_into; a checkpoint over many groups pays one allocation per column instead of one per group. The scratch holds no state between calls.

Source

pub fn load(&mut self, data: &[u8]) -> Result<(), StorageError>

Load from bytes.

Rejects short headers, CRC mismatches, column length mismatches, out-of-range row windows, edge count mismatches and trailing bytes.

Source§

impl ImmutableCsr

Source

pub fn row_degree(&self, src_vid: u32) -> usize

Row length of one vertex. Out-of-range rows report zero.

Source

pub fn edges_of(&self, src_vid: u32, ts: u64) -> Vec<Nbr>

Timestamp-filtered read of one row.

UNFILTERED single-predicate read for tests and offline tools only: filters by row delete stamp without consulting the version authority. Production traversals must use the row iterator or caller-buffer fill paths with the authority gate.

Source

pub fn get_edge(&self, src_vid: u32, dst: VertexId, ts: u64) -> Option<Nbr>

First timestamp-visible entry matching an endpoint key.

Bisects the sorted row to the (endpoint, rank) key range, then filters inside the range by timestamp. The row sort makes edge-id order the total version order within each key.

Source

pub fn get_edge_physical(&self, src_vid: u32, dst: VertexId) -> Option<Nbr>

First live entry matching an endpoint key without consulting snapshots.

Same key-range bisection as Self::get_edge; liveness is the raw open-deletion-stamp check instead of a timestamp filter.

Source

pub fn physical_edges_of(&self, src_vid: u32) -> Vec<Nbr>

Every physically stored entry of one row without timestamp filtering.

Test and offline use; production scans use fill_physical_into or the row iterator instead of this allocating accessor.

Source

pub fn fill_physical_into(&self, src_vid: u32, out: &mut Vec<Nbr>)

Fill a caller buffer with every physically stored entry of one row.

Source

pub fn visit_physical<F>(&self, src_vid: u32, f: F)
where F: FnMut(Nbr) -> bool,

Visit every physically stored entry of one row without allocating.

Source

pub fn visit_hot<F>(&self, src_vid: u32, f: F)
where F: FnMut(HotNbr) -> bool,

Visit every physically stored hot half of one row without allocating and without touching the stamp lines.

Hot-only counterpart of Self::visit_physical for traversals that resolve visibility through the version authority by edge_id.

Source

pub fn is_row_sorted(&self, _src_vid: u32) -> bool

Packed rows are always sorted by (endpoint, rank, edge_id).

Source

pub fn visit_threshold<F>( &self, src_vid: u32, lower: Option<(u32, i64)>, upper: Option<(u32, i64)>, f: F, )
where F: FnMut(Nbr) -> bool,

Visit live entries whose (endpoint, rank) key falls in the inclusive [lower, upper] range. The packed row is sorted, so the window is bisected and only the window is scanned for liveness.

Source

pub fn fill_threshold_into( &self, src_vid: u32, lower: Option<(u32, i64)>, upper: Option<(u32, i64)>, out: &mut Vec<Nbr>, )

Fill a caller buffer with the same range content as visit_threshold.

Source

pub fn nbr_at_offset(&self, src_vid: u32, offset: i32) -> Option<Nbr>

Read-only view of one packed slot without mutating state.

Source

pub fn has_physical_entries(&self, vid: u32) -> bool

Whether one row holds any physically stored entry.

Source

pub fn primary_contains(&self, src_vid: u32, edge_id: EdgeId) -> bool

Whether one row holds edge_id.

Source

pub fn locate_edge( &self, src_vid: u32, edge_id: EdgeId, ) -> Option<(EdgePosition, Nbr)>

Locate the first entry with edge_id, returning its packed slot.

Source

pub fn has_valued_entries(&self) -> bool

Whether this frozen group carries a bundled inline value column.

Only groups packed from a valued bundled group do; every other pack leaves the value columns empty and reads every value as NULL.

Source

pub fn value_by_edge_id( &self, src_vid: u32, edge_id: EdgeId, ) -> Option<(u64, bool)>

Read the inline value of one edge by id within its source row.

Paired value half of a frozen topology walk: resolve the edge from the topology walk first, then read its value here.

Source

pub fn value_by_endpoint( &self, src_vid: u32, endpoint: u32, ) -> Option<(u64, bool)>

Read the inline value of the first physical entry for one endpoint.

First-match walk like the bundled accessor: tombstones are physical entries and may match, mirroring the bundled layout where deletion clears validity but keeps the slot position.

Source

pub fn visit_physical_with_values<F>(&self, src_vid: u32, f: F)
where F: FnMut(Nbr, Option<u64>) -> bool,

Visit every physically stored entry of one row with its inline value (None for NULL slots).

Frozen counterpart of the bundled paired traversal: topology and value stay slot-parallel after the pack reorder, so one index serves both halves.

Source

pub fn any_valid_values(&self) -> bool

Whether any slot holds a valid inline value.

Source

pub fn vertex_census(&self, vid: u32) -> (usize, usize, usize)

Physical entry census of one row: (live, dead, capacity).

Same live/dead predicates as the mutable census; capacity equals the row length because frozen rows carry no reserved gaps.

Source

pub fn reclaimable_count(&self, vid: u32, cutoff: u64) -> usize

Count entries of one row reclaimable at cutoff.

Trait Implementations§

Source§

impl Clone for ImmutableCsr

Source§

fn clone(&self) -> ImmutableCsr

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl CsrBase for ImmutableCsr

Source§

fn vertex_capacity(&self) -> usize

Concurrency contract: row stores carry no internal locks. Concurrent reads are safe while no writer holds exclusive access, but any concurrent mutation requires caller-side mutual exclusion. The Send + Sync bounds express single-writer transfer across threads, not lock-free concurrent writes. Multi-core scaling comes from shard-level parallelism over NodeGroup shards above this trait; the CSR lock model itself stays single-writer with no row locks.
Source§

fn edge_count(&self) -> u64

Source§

fn dump(&self) -> Vec<u8> ⓘ

Source§

fn dump_into(&self, out: &mut Vec<u8>)

Append the same bytes as dump into out without an intermediate owned buffer, so checkpoint writes borrow the live topology instead of cloning it for serialization.
Source§

fn load(&mut self, data: &[u8]) -> Result<(), StorageError>

Source§

impl Debug for ImmutableCsr

Source§

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

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

impl Default for ImmutableCsr

Source§

fn default() -> ImmutableCsr

Returns the “default value” for a type. Read more
Source§

impl MutableCsrTrait for ImmutableCsr

Source§

fn insert_edge( &mut self, _src_vid: u32, _dst: VertexId, _edge_id: EdgeId, _ts: u64, ) -> Result<(), StorageError>

Insert an edge. Read more
Source§

fn delete_edge( &mut self, _src_vid: u32, _edge_id: EdgeId, _ts: u64, ) -> Result<bool, StorageError>

Delete an edge by edge_id. Read more
Source§

fn delete_edge_by_dst( &mut self, _src_vid: u32, _dst: VertexId, _ts: u64, ) -> usize

Delete all edges matching (src, dst) with full-match semantics. Read more
Source§

fn locate_edge( &self, src_vid: u32, edge_id: EdgeId, ) -> Option<(EdgePosition, Nbr)>

Locate one stored edge, returning its row position and copy. Read more
Source§

fn delete_edge_at_position( &mut self, _src_vid: u32, _position: EdgePosition, _expected: EdgeId, _ts: u64, ) -> Result<bool, StorageError>

Delete the edge at position when it still holds expected id. Read more
Source§

fn revert_delete_at_position( &mut self, _src_vid: u32, _position: EdgePosition, _expected: EdgeId, _ts: u64, ) -> bool

Revert the deletion at position when it still holds expected id. Read more
Source§

fn delete_edge_by_offset( &mut self, _src_vid: u32, _offset: i32, _ts: u64, ) -> Result<bool, StorageError>

Delete an edge by its offset position in the primary block. Read more
Source§

fn revert_delete_by_offset( &mut self, _src_vid: u32, _offset: i32, _ts: u64, ) -> bool

Revert a deleted edge by its offset position. Read more
Source§

fn nbr_at_offset(&self, src_vid: u32, offset: i32) -> Option<Nbr>

Read-only view of one primary slot for offset identity checks.
Source§

fn get_edge_physical(&self, src_vid: u32, dst: VertexId) -> Option<Nbr>

Locate the first live edge by endpoint without consulting snapshots. Read more
Source§

fn physical_edges_of(&self, src_vid: u32) -> Vec<Nbr>

Every physically stored entry of one vertex without timestamp filtering. Read more
Source§

fn fill_physical_into(&self, src_vid: u32, out: &mut Vec<Nbr>)

Fill a caller buffer with every physically stored entry of one vertex. Read more
Source§

fn has_physical_entries(&self, vid: u32) -> bool

Whether one vertex holds any physically stored entry.
Source§

fn primary_contains(&self, src_vid: u32, edge_id: EdgeId) -> bool

Whether the primary row of one vertex holds edge_id.
Source§

fn rollback_insert(&mut self, _src_vid: u32, _edge_id: EdgeId) -> bool

Erase one just-inserted edge for insert rollback (no tombstone trace). Read more
Source§

fn revert_delete_by_edge_id( &mut self, _src_vid: u32, _edge_id: EdgeId, _ts: u64, ) -> bool

Revert a deletion by edge id if it happened at or before ts. Read more
Source§

fn get_edge(&self, src_vid: u32, dst: VertexId, ts: u64) -> Option<Nbr>

Get a specific edge by source and destination. Test-only row-stamp filter; production reads go through the version authority.
Source§

fn edges_of(&self, src_vid: u32, ts: u64) -> Vec<Nbr>

Get all valid edges of a vertex at the given timestamp. Test-only row-stamp filter; production reads go through the version authority. Test and offline use; production traversals use the visitor or caller-buffer fill paths instead of this allocating accessor.
Source§

fn compact_vertex_with_reporting( &mut self, _vid: u32, _cutoff: u64, _on_edge_removed: &mut dyn FnMut(EdgeId, u64), ) -> usize

Reclaim one vertex in place, dropping entries eligible for collection at cutoff and tightening live entries without touching other rows. Read more
Source§

fn reclaimable_count(&self, vid: u32, cutoff: u64) -> usize

Count entries of one vertex that are reclaimable at cutoff. Read more
Source§

fn vertex_needs_compact(&self, vid: u32, cutoff: u64) -> bool

Whether one vertex holds anything reclaimable at cutoff.
Source§

fn vertex_census(&self, vid: u32) -> (usize, usize, usize)

Physical entry census of one vertex: (live, dead, capacity). Read more
Source§

fn vertex_reclaim_probe(&self, vid: u32, cutoff: u64) -> (usize, usize)

Single-walk reclaim probe of one vertex: (dead, reclaimable). Read more
Source§

fn row_gap(&self, _vid: u32) -> usize

Reserved primary slots minus live primary entries of one row. Read more
Source§

fn row_density(&self, _vid: u32) -> f32

Live primary entries per unit of reserved primary capacity. Read more
Source§

fn rebalance_row(&mut self, _vid: u32) -> bool

Rebalance one row in place, pulling overflow entries into primary gaps and repacking leftover overflow. Returns true when the row no longer holds overflow. Strategies without rows report true.
Source§

fn used_memory_size(&self) -> usize

Return the approximate memory usage in bytes.
Source§

fn delete_edge_by_dst_reporting( &mut self, src_vid: u32, dst: VertexId, ts: u64, _on_deleted: &mut dyn FnMut(EdgeId), ) -> usize

Delete all edges matching (src, dst), reporting every stamped id. Read more
Source§

fn delete_edge_by_dst_reporting_positioned( &mut self, src_vid: u32, dst: VertexId, ts: u64, on_deleted: &mut dyn FnMut(EdgeId, Option<EdgePosition>), ) -> usize

Delete all edges matching (src, dst), reporting each stamped id with its row position. Read more

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

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,

Causes self to use its Display implementation when Debug-formatted.
Source§

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,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

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,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

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,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

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> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

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 more
Source§

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

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where 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) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

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

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
where Self: Borrow<B>, B: ?Sized,

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
where Self: BorrowMut<B>, B: ?Sized,

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
where Self: AsRef<R>, R: ?Sized,

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
where Self: AsMut<R>, R: ?Sized,

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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
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> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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