Skip to main content

InstanceLeader

Struct InstanceLeader 

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

Primary leader implementation for the distributed KVBM system.

InstanceLeader coordinates block onboarding across local and remote instances. It owns a G2 (host memory) BlockManager and an optional G3 (disk) BlockManager, a set of workers for executing physical transfers, and a parallel worker abstraction for multi-rank RDMA operations.

Key responsibilities:

  • Block matching: finding which requested sequence hashes are already cached locally (via BlockAccessor policies).
  • Session management: creating, attaching, and driving onboard sessions between endpoint (source) and controller (destination) roles.
  • Remote connectivity: exchanging serialized layout metadata with peer instances so workers can perform RDMA transfers.
  • Velo RPC: registering handlers via VeloLeaderService so remote leaders can initiate sessions and exchange metadata.

Implementations§

Source§

impl InstanceLeader

Source

pub fn g2_manager(&self) -> &Arc<BlockManager<G2>>

Get a reference to the G2 BlockManager.

Source

pub fn g3_manager(&self) -> Option<&Arc<BlockManager<G3>>>

Get a reference to the optional G3 BlockManager.

Source

pub fn registry(&self) -> &BlockRegistry

Get the block registry.

Source

pub fn messenger(&self) -> &Arc<Messenger>

Get a reference to the Nova instance.

This provides access to the Nova distributed system for features like event coordination and cross-instance communication.

Source

pub fn runtime(&self) -> Handle

Get the tokio runtime handle from Nova.

This handle should be used for spawning background tasks that need to run on the KVBM runtime’s executor (e.g., offload engine pipelines).

Source

pub fn has_parallel_worker(&self) -> bool

Check if a parallel_worker is configured.

The parallel_worker is required for local transfer operations (e.g., offloading blocks between tiers).

Source

pub fn parallel_worker(&self) -> Option<Arc<dyn ParallelWorkers>>

Get the parallel worker for distributed operations.

The parallel worker fans out operations to all workers and aggregates results. It implements ObjectBlockOps for coordinated object storage uploads.

Source

pub fn object_client(&self) -> Option<Arc<dyn ObjectBlockOps>>

Get the object storage client for G4 operations.

Returns Some if object storage is configured, None otherwise. The client is used by InitiatorSession for G4 parallel search.

Source

pub fn add_remote_leader(&self, instance_id: InstanceId)

Add a remote leader to the search list.

Remote leaders are queried during find_matches_with_options when search_remote == true. This method allows adding remote leaders after construction (e.g., when instance IDs are only known after cluster setup).

Source

pub fn set_remote_leaders(&self, instance_ids: Vec<InstanceId>)

Set all remote leaders at once.

Source

pub fn remote_leaders(&self) -> Vec<InstanceId>

Get the list of remote leader instance IDs.

Source

pub fn scan_blocks( &self, sequence_hashes: &[SequenceHash], touch: bool, ) -> ScanBlocksResult

Scan for all blocks matching any of the given sequence hashes.

Unlike find_matches, this:

  • Does NOT stop on first miss
  • Returns blocks from both G2 and G3 tiers separately
  • Acquires blocks from pools (caller owns until dropped via RAII)
  • Returns sorted_matches ordered by SequenceHash::position()
§Arguments
  • sequence_hashes - Hashes to scan for
  • touch - Whether to update frequency tracking (for MultiLRU eviction policy)
§Algorithm
  1. Scan G2 manager for candidates
  2. Scan G3 manager for remaining candidates
  3. Build sorted_matches from both, sorted by position (lowest to highest)
Source

pub fn scan_with_policy<F, T>( &self, hashes: &[SequenceHash], touch: bool, policy: F, ) -> Vec<T>
where F: FnOnce(&[SequenceHash], &mut PolicyContext<'_, T>),

Scan blocks using a custom policy that controls iteration and yields results.

This provides maximum flexibility for implementing custom scanning strategies. The policy receives access to a BlockAccessor for acquiring blocks and a PolicyContext for yielding results incrementally.

§Arguments
  • hashes - Sequence hashes to scan
  • touch - Whether to update frequency tracking on block access
  • policy - Function that implements the scanning strategy
§Design

The accessor does NOT hold locks between calls. Each .find() call is independent. This enables:

  • Custom iteration patterns (sorted, BTree scan, binary search, etc.)
  • Yielding results incrementally (e.g., contiguous subsequences)
  • Future parallel execution (accessor is Send + Sync)
§Example: Simple linear scan
let blocks = leader.scan_with_policy(&hashes, true, |hashes, ctx| {
    for hash in hashes {
        if let Some(block) = ctx.accessor().find(*hash) {
            ctx.yield_item(block);
        }
    }
});
§Example: Find contiguous subsequences
let runs: Vec<Vec<TieredBlock>> = leader.scan_with_policy(&hashes, true, |hashes, ctx| {
    let mut run = Vec::new();
    let mut last_pos: Option<u64> = None;

    for hash in hashes.iter().sorted_by_key(|h| h.position()) {
        if let Some(block) = ctx.accessor().find(*hash) {
            let pos = block.position();
            if last_pos.map_or(true, |p| pos == p + 1) {
                run.push(block);
            } else {
                if !run.is_empty() { ctx.yield_item(std::mem::take(&mut run)); }
                run.push(block);
            }
            last_pos = Some(pos);
        } else if !run.is_empty() {
            ctx.yield_item(std::mem::take(&mut run));
            last_pos = None;
        }
    }
    if !run.is_empty() { ctx.yield_item(run); }
});
Source

pub fn builder() -> InstanceLeaderBuilder

Source

pub fn register_handlers(&self) -> Result<()>

Register Nova handlers for leader-to-leader communication.

This must be called after construction to enable distributed onboarding.

Source

pub fn release_session(&self, session_id: SessionId)

Release a completed session, dropping any held blocks.

This is optional - sessions will naturally be cleaned up when the InstanceLeader is dropped. Call this explicitly if you need to release blocks earlier.

Source

pub fn create_controllable_session( &self, sequence_hashes: &[SequenceHash], ) -> Result<ControllableSessionResult>

Create a controllable session for local blocks.

This is the “Decode side” of the inverted control pattern:

  1. Search local G2 and G3 for matches
  2. Create a ControllableSession that holds the blocks
  3. Return session_id to be sent to Prefill out-of-band

By default, G3→G2 staging starts immediately (auto_stage=true).

Source

pub fn create_controllable_session_with_options( &self, sequence_hashes: &[SequenceHash], options: ControllableSessionOptions, ) -> Result<ControllableSessionResult>

Create a controllable session with custom options.

Use this when you need to control auto-staging behavior.

Source

pub async fn attach_session( &self, remote_instance: InstanceId, session_id: SessionId, ) -> Result<SessionHandle>

Attach to a remote session. Returns a SessionHandle that uses SessionMessage for communication.

§Arguments
  • remote_instance - The instance hosting the session
  • session_id - The session to attach to
§Example
let handle = leader.attach_session(remote_id, session_id).await?;
let state = handle.wait_for_ready().await?;
handle.trigger_staging().await?;
Source

pub fn create_endpoint_session( &self, sequence_hashes: &[SequenceHash], ) -> Result<(SessionId, ServerSessionHandle)>

Create an endpoint session that a remote peer can attach to.

This searches local G2/G3 for blocks matching the given sequence hashes and creates a session that exposes them for remote RDMA pull.

Returns (session_id, handle) where:

  • session_id - Send to remote peer for attachment
  • handle - Use to control the session (send layer notifications, close)
§Example
// Create session for sequence hashes
let (session_id, handle) = leader.create_endpoint_session(&hashes)?;

// Send session_id to remote peer out-of-band
// Remote attaches via: remote_leader.attach_session(local_id, session_id)

// For layerwise transfer, notify when layers are ready
handle.notify_layers_ready(0..1).await?;
Source

pub fn create_endpoint_session_for_blocks( &self, blocks: BlockHolder<G2>, sequence_hashes: &[SequenceHash], layout_handles: &[LayoutHandle], ) -> Result<(SessionId, ServerSessionHandle)>

Create an endpoint session for specific pre-allocated blocks.

Unlike create_endpoint_session, this doesn’t search - it uses the provided blocks directly. Useful when the caller already has blocks to expose (e.g., after prefill computation).

§Arguments
  • blocks - Blocks to expose for RDMA pull
  • sequence_hashes - Sequence hashes for the blocks (must match block count)
  • layout_handles - Layout handles for the blocks (must match block count)
§Example
// After prefill computation, expose blocks for Decode to pull
let (session_id, handle) = leader.create_endpoint_session_for_blocks(
    prefill_blocks,
    &hashes,
    &layout_handles,
)?;
Source

pub fn has_remote_metadata(&self, instance: InstanceId) -> bool

Check if metadata for a remote instance has been loaded.

Returns true if import_remote_metadata has been successfully called for the given instance.

Source

pub fn worker_count(&self) -> usize

Get the number of workers attached to this leader.

Source

pub async fn export_worker_metadata(&self) -> Result<Vec<SerializedLayout>>

Export metadata from all workers.

Returns a Vec<SerializedLayout> where each element corresponds to a worker in rank order. This metadata can be sent to remote instances to enable RDMA transfers.

§Returns

Vector of serialized layouts, one per worker

Source

pub async fn import_remote_metadata( &self, remote_instance: InstanceId, metadata: Vec<SerializedLayout>, ) -> Result<()>

Import metadata from a remote instance’s workers.

This imports layout metadata from a remote instance, enabling RDMA transfers to pull data from that instance. Metadata is imported rank-by-rank:

  • local worker 0 imports remote worker 0’s metadata
  • local worker 1 imports remote worker 1’s metadata
  • etc.
§Arguments
  • remote_instance - The instance ID of the remote leader
  • metadata - Vector of SerializedLayout from remote workers (one per worker)
§Errors

Returns an error if:

  • No parallel worker configured
  • Metadata was already imported for this instance
  • Worker count mismatch between local and remote
  • Individual worker metadata import fails

Trait Implementations§

Source§

impl Clone for InstanceLeader

Source§

fn clone(&self) -> InstanceLeader

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 Leader for InstanceLeader

Source§

fn find_matches_with_options( &self, sequence_hashes: &[SequenceHash], options: FindMatchesOptions, ) -> Result<FindMatchesResult>

Find matching blocks with custom options.
Source§

fn find_matches( &self, sequence_hashes: &[SequenceHash], ) -> Result<FindMatchesResult>

Find matching blocks with default options.

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> BlockMetadata for T
where T: Clone + Send + Sync + 'static,

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

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

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

Source§

fn fg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the foreground set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like red() and green(), which have the same functionality but are pithier.

§Example

Set foreground color to white using fg():

use yansi::{Paint, Color};

painted.fg(Color::White);

Set foreground color to white using white().

use yansi::Paint;

painted.white();
Source§

fn primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
Source§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
Source§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
Source§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
Source§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
Source§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
Source§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
Source§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
Source§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
Source§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
Source§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
Source§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
Source§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
Source§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
Source§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
Source§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
Source§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
Source§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
Source§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
Source§

fn bg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the background set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like on_red() and on_green(), which have the same functionality but are pithier.

§Example

Set background color to red using fg():

use yansi::{Paint, Color};

painted.bg(Color::Red);

Set background color to red using on_red().

use yansi::Paint;

painted.on_red();
Source§

fn on_primary(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
Source§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
Source§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
Source§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
Source§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
Source§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
Source§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
Source§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
Source§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
Source§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
Source§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
Source§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
Source§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
Source§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
Source§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
Source§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
Source§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
Source§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
Source§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
Source§

fn attr(&self, value: Attribute) -> Painted<&T>

Enables the styling Attribute value.

This method should be used rarely. Instead, prefer to use attribute-specific builder methods like bold() and underline(), which have the same functionality but are pithier.

§Example

Make text bold using attr():

use yansi::{Paint, Attribute};

painted.attr(Attribute::Bold);

Make text bold using using bold().

use yansi::Paint;

painted.bold();
Source§

fn bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
Source§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
Source§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
Source§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
Source§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
Source§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
Source§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
Source§

fn quirk(&self, value: Quirk) -> Painted<&T>

Enables the yansi Quirk value.

This method should be used rarely. Instead, prefer to use quirk-specific builder methods like mask() and wrap(), which have the same functionality but are pithier.

§Example

Enable wrapping using .quirk():

use yansi::{Paint, Quirk};

painted.quirk(Quirk::Wrap);

Enable wrapping using wrap().

use yansi::Paint;

painted.wrap();
Source§

fn mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
Source§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
Source§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
Source§

fn clear(&self) -> Painted<&T>

👎Deprecated since 1.0.1:

renamed to resetting() due to conflicts with Vec::clear(). The clear() method will be removed in a future release.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
Source§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
Source§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
Source§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
Source§

fn whenever(&self, value: Condition) -> Painted<&T>

Conditionally enable styling based on whether the Condition value applies. Replaces any previous condition.

See the crate level docs for more details.

§Example

Enable styling painted only when both stdout and stderr are TTYs:

use yansi::{Paint, Condition};

painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);
Source§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new Painted with a default Style. Read more
Source§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
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> 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

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