Struct mz_catalog::durable::persist::PersistHandle

source ·
pub(crate) struct PersistHandle<T: TryIntoStateUpdateKind, U: ApplyUpdate<T>> {
    pub(crate) mode: Mode,
    since_handle: SinceHandle<SourceData, (), Timestamp, Diff, i64>,
    write_handle: WriteHandle<SourceData, (), Timestamp, Diff>,
    listen: Listen<SourceData, (), Timestamp, Diff>,
    persist_client: PersistClient,
    shard_id: ShardId,
    pub(crate) snapshot: Vec<(T, Timestamp, Diff)>,
    update_applier: U,
    pub(crate) upper: Timestamp,
    fenceable_token: FenceableToken,
    catalog_content_version: Version,
    metrics: Arc<Metrics>,
}
Expand description

A handle for interacting with the persist catalog shard.

The catalog shard is used in multiple different contexts, for example pre-open and post-open, but for all contexts the majority of the durable catalog’s behavior is identical. This struct implements those behaviors that are identical while allowing the user to specify the different behaviors via generic parameters.

The behavior of the durable catalog can be different along one of two axes. The first is the format of each individual update, i.e. raw binary, the current protobuf version, previous protobuf versions, etc. The second axis is what to do with each individual update, for example before opening we cache all config updates but don’t cache them after opening. These behaviors are customizable via the T: TryIntoStateUpdateKind and U: ApplyUpdate<T> generic parameters respectively.

Fields§

§mode: Mode

The Mode that this catalog was opened in.

§since_handle: SinceHandle<SourceData, (), Timestamp, Diff, i64>

Since handle to control compaction.

§write_handle: WriteHandle<SourceData, (), Timestamp, Diff>

Write handle to persist.

§listen: Listen<SourceData, (), Timestamp, Diff>

Listener to catalog changes.

§persist_client: PersistClient

Handle for connecting to persist.

§shard_id: ShardId

Catalog shard ID.

§snapshot: Vec<(T, Timestamp, Diff)>

Cache of the most recent catalog snapshot.

We use a tuple instead of StateUpdate to make consolidation easier.

§update_applier: U

Applies custom processing, filtering, and fencing for each individual update.

§upper: Timestamp

The current upper of the persist shard.

§fenceable_token: FenceableToken

The fence token of the catalog, if one exists.

§catalog_content_version: Version

The semantic version of the current binary.

§metrics: Arc<Metrics>

Metrics for the persist catalog.

Implementations§

source§

impl<T: TryIntoStateUpdateKind, U: ApplyUpdate<T>> PersistHandle<T, U>

source

async fn increment_catalog_upgrade_shard_version( &mut self, organization_id: Uuid, )

Increment the version in the catalog upgrade shard to the code’s current version.

source

async fn current_upper(&mut self) -> Timestamp

Fetch the current upper of the catalog state.

source

pub(crate) async fn compare_and_append<S: IntoStateUpdateKindJson>( &mut self, updates: Vec<(S, Diff)>, ) -> Result<Timestamp, CompareAndAppendError>

Appends updates iff the current global upper of the catalog is self.upper.

Returns the next upper used to commit the transaction.

source

async fn snapshot_unconsolidated(&mut self) -> Vec<StateUpdate<StateUpdateKind>>

Generates an iterator of StateUpdate that contain all unconsolidated updates to the catalog state up to, and including, as_of.

source

pub(crate) async fn sync_to_current_upper(&mut self) -> Result<(), FenceError>

Listen and apply all updates that are currently in persist.

Returns an error if this instance has been fenced out.

source

pub(crate) async fn sync( &mut self, target_upper: Timestamp, ) -> Result<(), FenceError>

Listen and apply all updates up to target_upper.

Returns an error if this instance has been fenced out.

source

async fn sync_inner( &mut self, target_upper: Timestamp, ) -> Result<(), FenceError>

source

pub(crate) fn apply_updates( &mut self, updates: impl IntoIterator<Item = StateUpdate<T>>, ) -> Result<(), FenceError>

source

pub(crate) fn consolidate(&mut self)

source

async fn with_trace<R>( &mut self, f: impl FnOnce(&Vec<(T, Timestamp, Diff)>) -> Result<R, CatalogError>, ) -> Result<R, CatalogError>

Execute and return the results of f on the current catalog trace.

Will return an error if the catalog has been fenced out.

source

async fn read_handle(&mut self) -> ReadHandle<SourceData, (), Timestamp, Diff>

Open a read handle to the catalog.

source

async fn expire(self: Box<Self>)

Politely releases all external resources that can only be released in an async context.

source§

impl<U: ApplyUpdate<StateUpdateKind>> PersistHandle<StateUpdateKind, U>

source

async fn with_snapshot<T>( &mut self, f: impl FnOnce(Snapshot) -> Result<T, CatalogError>, ) -> Result<T, CatalogError>

Execute and return the results of f on the current catalog snapshot.

Will return an error if the catalog has been fenced out.

source

async fn persist_snapshot( &mut self, ) -> impl Iterator<Item = StateUpdate> + DoubleEndedIterator

Generates an iterator of StateUpdate that contain all updates to the catalog state.

The output is fetched directly from persist instead of the in-memory cache.

The output is consolidated and sorted by timestamp in ascending order.

source§

impl PersistHandle<StateUpdateKindJson, UnopenedCatalogStateInner>

source

pub(crate) async fn new( persist_client: PersistClient, organization_id: Uuid, version: Version, deploy_generation: Option<u64>, metrics: Arc<Metrics>, ) -> Result<PersistHandle<StateUpdateKindJson, UnopenedCatalogStateInner>, DurableCatalogError>

Create a new UnopenedPersistCatalogState to the catalog state associated with organization_id.

All usages of the persist catalog must go through this function. That includes the catalog-debug tool, the adapter’s catalog, etc.

source

async fn open_inner( self, mode: Mode, initial_ts: EpochMillis, bootstrap_args: &BootstrapArgs, ) -> Result<Box<dyn DurableCatalogState>, CatalogError>

source

fn is_initialized_inner(&self) -> bool

Reports if the catalog state has been initialized.

NOTE: This is the answer as of the last call to PersistHandle::sync or PersistHandle::sync_to_current_upper, not necessarily what is currently in persist.

source

async fn get_current_config( &mut self, key: &str, ) -> Result<Option<u64>, DurableCatalogError>

Get the current value of config key.

Some configs need to be read before the catalog is opened for bootstrapping.

source

pub(crate) async fn get_user_version( &mut self, ) -> Result<Option<u64>, DurableCatalogError>

Get the user version of this instance.

The user version is used to determine if a migration is needed.

source

async fn get_current_setting( &mut self, name: &str, ) -> Result<Option<String>, DurableCatalogError>

Get the current value of setting name.

Some settings need to be read before the catalog is opened for bootstrapping.

source

async fn get_catalog_content_version( &mut self, ) -> Result<Option<Version>, DurableCatalogError>

Get the catalog content version.

The catalog content version is the semantic version of the most recent binary that wrote to the catalog.

source§

impl PersistHandle<StateUpdateKindJson, UnopenedCatalogStateInner>

source

pub(crate) async fn debug_edit<T: Collection>( &mut self, key: T::Key, value: T::Value, ) -> Result<Option<T::Value>, CatalogError>
where T::Key: PartialEq + Eq + Debug + Clone, T::Value: Debug + Clone,

Manually update value of key in collection T to value.

source

pub(crate) async fn debug_delete<T: Collection>( &mut self, key: T::Key, ) -> Result<(), CatalogError>
where T::Key: PartialEq + Eq + Debug + Clone, T::Value: Debug,

Manually delete key from collection T.

source

async fn current_snapshot( &mut self, ) -> Result<impl IntoIterator<Item = StateUpdate> + '_, CatalogError>

Generates a Vec<StateUpdate> that contain all updates to the catalog state.

The output is consolidated and sorted by timestamp in ascending order and the current upper.

Trait Implementations§

source§

impl<T: Debug + TryIntoStateUpdateKind, U: Debug + ApplyUpdate<T>> Debug for PersistHandle<T, U>

source§

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

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

impl DurableCatalogState for PersistHandle<StateUpdateKind, CatalogStateInner>

source§

fn is_read_only(&self) -> bool

Returns true if the catalog is opened in read only mode, false otherwise.
source§

fn is_savepoint(&self) -> bool

Returns true if the catalog is opened is savepoint mode, false otherwise.
source§

fn transaction<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<Transaction<'_>, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Creates a new durable catalog state transaction.
source§

fn commit_transaction<'life0, 'async_trait>( &'life0 mut self, txn_batch: TransactionBatch, ) -> Pin<Box<dyn Future<Output = Result<Timestamp, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Commits a durable catalog state transaction. Read more
source§

fn confirm_leadership<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<(), CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Confirms that this catalog is connected as the current leader. Read more
source§

fn allocate_id<'life0, 'life1, 'async_trait>( &'life0 mut self, id_type: &'life1 str, amount: u64, ) -> Pin<Box<dyn Future<Output = Result<Vec<u64>, CatalogError>> + Send + 'async_trait>>
where Self: Send + 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Allocates and returns amount IDs of id_type.
source§

fn allocate_system_ids<'life0, 'async_trait>( &'life0 mut self, amount: u64, ) -> Pin<Box<dyn Future<Output = Result<Vec<GlobalId>, CatalogError>> + Send + 'async_trait>>
where Self: Send + 'async_trait, 'life0: 'async_trait,

Allocates and returns amount system GlobalIds.
source§

fn allocate_user_id<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<GlobalId, CatalogError>> + Send + 'async_trait>>
where Self: Send + 'async_trait, 'life0: 'async_trait,

Allocates and returns a user GlobalId.
source§

fn allocate_user_cluster_id<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<ClusterId, CatalogError>> + Send + 'async_trait>>
where Self: Send + 'async_trait, 'life0: 'async_trait,

Allocates and returns a user ClusterId.
source§

fn allocate_user_replica_id<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<ReplicaId, CatalogError>> + Send + 'async_trait>>
where Self: Send + 'async_trait, 'life0: 'async_trait,

Allocates and returns a user ReplicaId.
source§

fn allocate_system_replica_id<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<ReplicaId, CatalogError>> + Send + 'async_trait>>
where Self: Send + 'async_trait, 'life0: 'async_trait,

Allocates and returns a system ReplicaId.
source§

fn allocate_storage_usage_ids<'life0, 'async_trait>( &'life0 mut self, amount: u64, ) -> Pin<Box<dyn Future<Output = Result<Vec<u64>, CatalogError>> + Send + 'async_trait>>
where Self: Send + 'async_trait, 'life0: 'async_trait,

Allocates and returns storage usage IDs.
source§

impl OpenableDurableCatalogState for PersistHandle<StateUpdateKindJson, UnopenedCatalogStateInner>

source§

fn open_savepoint<'life0, 'async_trait>( self: Box<Self>, initial_ts: EpochMillis, bootstrap_args: &'life0 BootstrapArgs, ) -> Pin<Box<dyn Future<Output = Result<Box<dyn DurableCatalogState>, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Opens the catalog in a mode that accepts and buffers all writes, but never durably commits them. This is used to check and see if opening the catalog would be successful, without making any durable changes. Read more
source§

fn open_read_only<'life0, 'async_trait>( self: Box<Self>, bootstrap_args: &'life0 BootstrapArgs, ) -> Pin<Box<dyn Future<Output = Result<Box<dyn DurableCatalogState>, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Opens the catalog in read only mode. All mutating methods will return an error. Read more
source§

fn open<'life0, 'async_trait>( self: Box<Self>, initial_ts: EpochMillis, bootstrap_args: &'life0 BootstrapArgs, ) -> Pin<Box<dyn Future<Output = Result<Box<dyn DurableCatalogState>, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Opens the catalog in a writeable mode. Optionally initializes the catalog, if it has not been initialized, and perform any migrations needed. Read more
source§

fn open_debug<'async_trait>( self: Box<Self>, ) -> Pin<Box<dyn Future<Output = Result<DebugCatalogState, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait,

Opens the catalog for manual editing of the underlying data. This is helpful for fixing a corrupt catalog.
source§

fn is_initialized<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<bool, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Reports if the catalog state has been initialized.
source§

fn epoch<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<Epoch, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Returns the epoch of the current durable catalog state. The epoch acts as a fencing token to prevent split brain issues across two DurableCatalogStates. When a new DurableCatalogState opens the catalog, it will increment the epoch by one (or initialize it to some value if there’s no existing epoch) and store the value in memory. It’s guaranteed that no two DurableCatalogStates will return the same value for their epoch. Read more
source§

fn get_deployment_generation<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<u64, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get the most recent deployment generation written to the catalog. Not necessarily the deploy generation of this instance.
source§

fn get_enable_0dt_deployment<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<Option<bool>, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get the enable_0dt_deployment config value of this instance. Read more
source§

fn get_0dt_deployment_max_wait<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<Option<Duration>, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get the with_0dt_deployment_max_wait config value of this instance. Read more
source§

fn get_enable_0dt_deployment_panic_after_timeout<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<Option<bool>, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get the enable_0dt_deployment_panic_after_timeout config value of this instance. Read more
source§

fn has_system_config_synced_once<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<bool, DurableCatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Reports if the remote configuration was synchronized at least once.
source§

fn trace_unconsolidated<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<Trace, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Generate an unconsolidated Trace of catalog contents.
source§

fn trace_consolidated<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<Trace, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Generate a consolidated Trace of catalog contents.
source§

fn expire<'async_trait>( self: Box<Self>, ) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where Self: 'async_trait,

Politely releases all external resources that can only be released in an async context.
source§

impl ReadOnlyDurableCatalogState for PersistHandle<StateUpdateKind, CatalogStateInner>

source§

fn epoch(&self) -> Epoch

Returns the epoch of the current durable catalog state. The epoch acts as a fencing token to prevent split brain issues across two DurableCatalogStates. When a new DurableCatalogState opens the catalog, it will increment the epoch by one (or initialize it to some value if there’s no existing epoch) and store the value in memory. It’s guaranteed that no two DurableCatalogStates will return the same value for their epoch. Read more
source§

fn expire<'async_trait>( self: Box<Self>, ) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where Self: 'async_trait,

Politely releases all external resources that can only be released in an async context.
source§

fn get_audit_logs<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<Vec<VersionedEvent>, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get all audit log events. Read more
source§

fn get_next_id<'life0, 'life1, 'async_trait>( &'life0 mut self, id_type: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<u64, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get the next ID of id_type, without allocating it.
source§

fn snapshot<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<Snapshot, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get a snapshot of the catalog.
source§

fn sync_to_current_updates<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<Vec<StateUpdate>, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Listen and return all updates that are currently in the catalog. Read more
source§

fn sync_updates<'life0, 'async_trait>( &'life0 mut self, target_upper: Timestamp, ) -> Pin<Box<dyn Future<Output = Result<Vec<StateUpdate>, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Listen and return all updates in the catalog up to target_upper. Read more
source§

fn get_next_user_item_id<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<u64, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get the next user ID without allocating it.
source§

fn get_next_system_item_id<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<u64, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get the next system ID without allocating it.
source§

fn get_next_system_replica_id<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<u64, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get the next system replica id without allocating it.
source§

fn get_next_user_replica_id<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<u64, CatalogError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get the next user replica id without allocating it.

Auto Trait Implementations§

§

impl<T, U> Freeze for PersistHandle<T, U>
where U: Freeze,

§

impl<T, U> !RefUnwindSafe for PersistHandle<T, U>

§

impl<T, U> Send for PersistHandle<T, U>
where U: Send, T: Send,

§

impl<T, U> Sync for PersistHandle<T, U>
where U: Sync, T: Sync,

§

impl<T, U> Unpin for PersistHandle<T, U>
where U: Unpin, T: Unpin,

§

impl<T, U> !UnwindSafe for PersistHandle<T, U>

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> AsAny for T
where T: Any,

source§

fn as_any(&self) -> &(dyn Any + '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<T, U> CastInto<U> for T
where U: CastFrom<T>,

source§

fn cast_into(self) -> U

Performs the cast.
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> FutureExt for T

source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
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> 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<T, U> OverrideFrom<Option<&T>> for U
where U: OverrideFrom<T>,

source§

fn override_from(self, layer: &Option<&T>) -> U

Override the configuration represented by Self with values from the given layer.
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.
§

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<P, R> ProtoType<R> for P
where R: RustType<P>,

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<'a, S, T> Semigroup<&'a S> for T
where T: Semigroup<S>,

source§

fn plus_equals(&mut self, rhs: &&'a S)

The method of std::ops::AddAssign, for types that do not implement AddAssign.
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> 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>,

§

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>,

§

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