Skip to main content

CsrWithProperties

Struct CsrWithProperties 

Source
pub struct CsrWithProperties { /* private fields */ }

Implementations§

Source§

impl CsrWithProperties

Source

pub fn column_stats_snapshot(&self, column: &str) -> Option<ColumnStatsSnapshot>

Source

pub fn prune_bounds(&self, column: &str) -> Option<(Value, Value)>

Global min/max bounds of one column for predicate pushdown pruning.

Callers must scan instead of pruning when this is None.

Source

pub fn column_encoding_type(&self, column: &str) -> Option<EncodingType>

Encoding applied to one property column, if the column exists.

Source

pub fn apply_encoding_to_column( &mut self, column: &str, encoding_type: EncodingType, fsst_max_symbols: usize, ) -> Result<(), StorageError>

Apply one encoding to a single property column.

Property columns are chunk-backed, so the encoding is applied per chunk and point updates keep decoding only the affected chunk. Empty columns are a no-op. Unknown columns are an explicit error.

Source

pub fn auto_encode_properties(&mut self) -> usize

Select and apply one encoding per property column.

Explicit maintenance operation: hot columns stay unencoded between runs by design so everyday writes never pay re-encoding. Each column is profiled chunk by chunk, so no column-wide value vector is built. Returns the number of columns that received an encoding.

Source

pub fn adapt_encodings_for_checkpoint( &mut self, dirty_only: Option<&[Arc<str>]>, min_rows: usize, ) -> usize

Infer encodings for checkpoint dirty columns.

Checkpoint-only entry: the write path never calls this, so hot columns pay no re-encoding on everyday writes. dirty_only selects the inference set; None infers every column for first-flush completeness. Columns below min_rows are skipped. A column keeps its current encoding when inference yields none or matches. Returns the number of columns that changed encoding.

Source§

impl CsrWithProperties

Source

pub fn reserve_for_batch(&mut self, additional: usize)

Pre-allocate row and column capacity for an incoming batch.

Sizes visibility, reverse indexes and every property column once so a batch of additional edges lands in reserved gaps instead of growing row by row. Inline stubs keep no rows and skip reservation.

Source

pub fn compaction_stats(&self) -> PropertyCompactionStats

Source

pub fn gc_property_versions(&mut self, min_active_snapshot_ts: u64) -> usize

Garbage-collect property version-chain entries that no active snapshot can observe. Returns the total number of before-images removed.

Source

pub fn used_memory_size(&self) -> usize

Source

pub fn mapping_row_bytes(&self) -> (usize, usize)

Split property memory into mapping bytes (edge map plus reverse index plus free list) and row bytes (visibility plus columns). Caliber for per-edge accounting without walking rows.

Source

pub fn refresh_column_stats(&mut self)

Recompute persisted per-column statistics from flush buffers.

Called before the property file is serialized so statistics follow the checkpoint instead of drifting. Only columns marked dirty are recomputed; clean columns keep their persisted statistics. Columns that fail to compute keep their previous statistics.

Source

pub fn refresh_column_stats_for(&mut self, column: &str)

Refresh statistics for one column only. Used by column-level checkpoint follow-up when only a subset changed.

Source§

impl CsrWithProperties

Source

pub const EDGE_MAP_SEGMENT_ROWS: usize = 1024

Segment granularity for sparse map scans. One segment covers this many edge ids; empty segments are skipped by segment-aware scans so sparse id ranges never pay a full dense walk.

Source

pub fn release_row(&mut self, row_idx: usize)

Release a row back to the free list without leaving an orphan.

Clears the visibility stamp so the slot is skipped by reads and GC scans, drops the edge mapping via the reverse index, and queues the slot for reuse. Reused slots are fully overwritten by allocate_row. Idempotent via the explicit state machine: releasing an already-free or out-of-range row is a no-op, and virgin slots never enter the free list twice so no separate membership set is needed. Slots that were never used are never admitted to the free list.

Source

pub fn get_row_for_edge(&self, edge_id: EdgeId) -> Option<usize>

Get the row index for an edge.

Source

pub fn remove_edge_mapping(&mut self, edge_id: EdgeId) -> Option<usize>

Remove edge-to-row mapping and return the row index.

Source

pub fn contains_edge(&self, edge_id: EdgeId) -> bool

Whether the store holds a row mapping for edge_id.

Source

pub fn edge_mappings(&self) -> impl Iterator<Item = (EdgeId, u32)>

Iterate over all edge->row mappings in slot order (for compaction).

Source

pub fn edge_ids(&self) -> impl Iterator<Item = EdgeId>

Source

pub fn row_count(&self) -> usize

Source

pub fn nonempty_map_segments(&self) -> Vec<usize>

Ids of segments holding at least one live mapping.

Source

pub fn edge_mappings_in_segment( &self, segment: usize, ) -> impl Iterator<Item = (EdgeId, u32)>

Mappings within one segment, for segment-skipping scans.

Source

pub fn edge_map_memory_bytes(&self) -> usize

Sparse map memory in bytes, for observability.

Source§

impl CsrWithProperties

Source

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

Source

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

Source§

impl CsrWithProperties

Source

pub fn get_projected_physical_by_edge_id( &self, edge_id: EdgeId, query_ts: u64, projection: Option<&[Arc<str>]>, ) -> Option<Vec<(Arc<str>, Option<Value>)>>

Physical property projection without row visibility filtering.

Callers must decide visibility through the version authority first; row stamps exist only for collection. Returns None only when the edge has no row mapping. Lenient on history: version chains do not survive checkpoints, so pre-floor reads may return the current value; time-travel callers use the strict entry instead.

Source

pub fn get_projected_physical_batch_by_edge_ids( &self, edge_ids: &[EdgeId], query_ts: u64, projection: Option<&[Arc<str>]>, ) -> Vec<Option<Vec<(Arc<str>, Option<Value>)>>>

Physical property projection for many edges without visibility filtering.

Batch form of Self::get_projected_physical_by_edge_id: the projection resolves to column indices once and every edge reuses the mapping, so a projected adjacency pays one hash-based schema pass instead of one string scan per edge. Output order follows the input; each entry carries the same contract as the single-edge call (None for inline tables, unmapped edges and out-of-range rows).

Source

pub fn try_get_projected_physical_by_edge_id( &self, edge_id: EdgeId, query_ts: u64, projection: Option<&[Arc<str>]>, ) -> Result<Option<Vec<(Arc<str>, Option<Value>)>>, StorageError>

Strict physical projection with explicit decode errors.

Query entry for explicit failure semantics. Visibility stays with the caller through the version authority; row stamps never decide it here. Never-written windows yield None cells; corrupt snapshots, side-store payloads and raw length or dimension mismatches yield Err carrying the column and edge so scans never observe silent nulls. Reads below the history epoch floor fail instead of serving the current value as history. Unmapped edges still yield Ok(None).

Source

pub fn try_get_projected_physical_batch_by_edge_ids( &self, edge_ids: &[EdgeId], query_ts: u64, projection: Option<&[Arc<str>]>, ) -> Result<Vec<Option<Vec<(Arc<str>, Option<Value>)>>>, StorageError>

Strict batch physical projection with explicit decode errors.

Batch form of Self::try_get_projected_physical_by_edge_id: the projection resolves once and every edge reuses it, with the same epoch fence and decode contract per edge. Output order follows the input.

Source

pub fn latest_properties_by_edge_id( &self, edge_id: EdgeId, ) -> Option<Vec<(Arc<str>, Value)>>

Newest stored value of every non-null column for one edge.

Snapshot-independent by design: callers need the word currently stored (index maintenance, rollback bookkeeping), which must not depend on a reader timestamp and must not pay a version-chain walk. Nulls are dropped because an absent cell has no index entry to reconcile; inline tables have no rows to read and yield None.

Source

pub fn matches_predicates_for_edge( &self, edge_id: EdgeId, query_ts: u64, predicates: &[ScanPredicate], ) -> bool

Whether one edge matches every pushed predicate at query_ts.

Column-scan layer: only predicate columns are read, each through its null bitmap, and no intermediate record is materialized. A missing column, a missing row mapping or a null cell never matches, mirroring the query NULL semantics where comparisons against NULL are false.

Source

pub fn filter_edge_ids_by_predicates( &self, predicates: &[ScanPredicate], query_ts: u64, candidates: Option<&[EdgeId]>, ) -> Vec<EdgeId>

Filter edge ids by pushed predicates at the column-scan layer.

Attribute equality and range predicates filter row numbers first; callers look up topology only for the returned hits. Nulls use bitmap semantics throughout and no intermediate records are materialized. candidates bounds the scan when the caller already holds row numbers; None scans every mapped edge.

Two pre-filters run before the per-row version-chain reads: the merged column bounds short-circuit the whole scan, then the per-chunk zone bounds skip dead 1024-row chunks, so a selective predicate over a clustered column only decodes its surviving chunks. Output order follows the input in both arms: skipping never reorders survivors.

Source

pub fn get_typed_columns_batch_by_edge_ids( &self, edge_ids: &[EdgeId], query_ts: u64, projection: Option<&[Arc<str>]>, ) -> Vec<(Arc<str>, ColumnValues)>

Typed column-major batch decode without visibility filtering.

Native edge columnar entry: the caller holds one authority verdict per edge, so this decodes straight from the property columns into typed crate::cursor::ColumnValues. Projection resolves once; each column decodes according to its declared type and degrades to General on type mismatch, so one mixed column never forces the whole batch back to row transpose. Output order follows the input edge order.

Source§

impl CsrWithProperties

Source

pub fn new(property_schema: Vec<PropertySchema>) -> CsrWithProperties

Build the columnar store from its schema.

property_schema owns every column name: column_index, the name index and the dump format all read from it. Column also carries a name, but only to label decode errors, so it is filled here and refreshed on rename without any other code reading it.

Source

pub fn inline_stub(property_schema: Vec<PropertySchema>) -> CsrWithProperties

Schema-only stub for the inline record forms.

Keeps the schema with its name/id indexes for validation and WAL naming, but holds no rows: every row read or write fails loudly so a missed dispatch can never fork a second property truth beside the CSR value column.

Source

pub fn is_inline_stub(&self) -> bool

Whether this store is a schema-only inline stub.

Source

pub fn column_name_by_prop_id(&self, prop_id: i32) -> Option<&str>

Column name for one stable identifier, if the column exists.

Source

pub fn clear_dirty_columns(&mut self)

Clear per-column dirt after a successful checkpoint.

Source

pub fn property_schema(&self) -> &[PropertySchema]

Source

pub fn has_property(&self, name: &str) -> bool

Source

pub fn get_property_id(&self, name: &str) -> Option<PropertyId>

Source

pub fn add_property( &mut self, name: String, data_type: DataType, nullable: bool, ) -> Result<PropertyId, StorageError>

Source

pub fn remove_property(&mut self, name: &str) -> Result<(), StorageError>

Source

pub fn column_cloned(&self, name: &str) -> Option<Column>

Clone one physical column for the staged drop snapshot.

Source

pub fn has_column_dirt(&self, name: &str) -> bool

Whether one column holds unrefreshed writes.

Source

pub fn dirty_column_names(&self) -> Vec<Arc<str>>

Names of columns mutated since the last checkpoint. Drives dirty-column incremental persistence: clean columns reuse the last flushed encoding instead of paying re-export and re-encode.

Source

pub fn restore_property_at( &mut self, index: usize, schema: PropertySchema, column: Column, had_column_dirt: bool, )

Put back a column removed by a failed drop publish at its exact schema position, restoring its dirt mark when it had one.

Source

pub fn rename_property( &mut self, old_name: &str, new_name: &str, ) -> Result<(), StorageError>

Source

pub fn backfill_column( &mut self, column: &str, default: &Value, ) -> Result<(), StorageError>

Backfill one column with a default value on every existing row.

Used by the staged add-column fill step. Unknown columns are an explicit error; a single row failure aborts with the error.

Source

pub fn restore_prop_ids(&mut self, ids: &HashMap<Arc<str>, i32>)

Restore stable column identifiers from shard payloads after a merge.

Shard dumps carry the flushed identifiers; the fresh merge target starts from dense indexes, so identifiers are re-applied here to keep undo parameters keyed by id valid across checkpoints. Unknown names are skipped. The allocator moves past the maximum restored id.

Source

pub fn prop_id_of(&self, name: &str) -> Option<i32>

Stable identifier for one column in this shard, if present.

Source§

impl CsrWithProperties

Source

pub fn export_row( &self, edge_id: EdgeId, ) -> Option<(u64, Option<u64>, Vec<(Arc<str>, Option<Value>)>)>

Export one edge row for per-group property sharding.

Returns the row visibility plus current values for every schema column (nulls as None). Unknown edges yield None. The export carries plain values only; version history stays memory-only and is collapsed on checkpoint, matching the whole-file dump contract.

Source

pub fn import_row( &mut self, edge_id: EdgeId, create_ts: u64, delete_ts: Option<u64>, values: &[(Arc<str>, Option<Value>)], ) -> Result<(), StorageError>

Import one exported row into this store for shard merge.

Unknown columns in values are skipped so shards written under an older published schema still merge; missing columns keep their defaults via the fresh insert path. Nulls are materialized explicitly so a shard null never becomes a default on merge.

Source§

impl CsrWithProperties

Source

pub fn mark_deleted(&mut self, edge_id: EdgeId, ts: u64) -> bool

Source

pub fn revert_deletion_at_row(&mut self, row_idx: usize) -> bool

Source

pub fn revert_deletion_for_edge(&mut self, edge_id: EdgeId) -> bool

Source§

impl CsrWithProperties

Source

pub fn insert_for_edge( &mut self, edge_id: EdgeId, values: &[(Arc<str>, Value)], create_ts: u64, ) -> Result<(), StorageError>

Insert properties for an edge and associate the row with edge_id.

Source

pub fn insert_for_edge_at( &mut self, edge_id: EdgeId, positioned: &[(usize, Value)], create_ts: u64, ) -> Result<(), StorageError>

Insert properties for an edge from pre-resolved column positions.

Hot write-path entry: the caller resolved every column once through the schema index, so this performs no name lookup, string clone or string comparison per edge. Positions must be store column positions; out-of-range entries fail loudly through allocate_row_at.

Source

pub fn set_property_for_edge( &mut self, edge_id: EdgeId, name: &str, value: Option<Value>, ts: u64, ) -> Result<(), StorageError>

Edge-aware property update: lookup row via edge_id.

Source

pub fn set_property_by_id_for_edge( &mut self, edge_id: EdgeId, prop_id: PropertyId, value: Option<Value>, ts: u64, ) -> Result<(), StorageError>

Source

pub fn set_property_at_row( &mut self, row_idx: usize, name: &str, value: Option<Value>, ts: u64, ) -> Result<(), StorageError>

Trait Implementations§

Source§

impl Clone for CsrWithProperties

Source§

fn clone(&self) -> CsrWithProperties

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 Debug for CsrWithProperties

Source§

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

Formats the value using the given formatter. 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> 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