Struct mz_adapter::catalog::Catalog

source ·
pub struct Catalog { /* private fields */ }
Expand description

A Catalog keeps track of the SQL objects known to the planner.

For each object, it keeps track of both forward and reverse dependencies: i.e., which objects are depended upon by the object, and which objects depend upon the object. It enforces the SQL rules around dropping: an object cannot be dropped until all of the objects that depend upon it are dropped. It also enforces uniqueness of names.

SQL mandates a hierarchy of exactly three layers. A catalog contains databases, databases contain schemas, and schemas contain catalog items, like sources, sinks, view, and indexes.

To the outside world, databases, schemas, and items are all identified by name. Items can be referred to by their FullItemName, which fully and unambiguously specifies the item, or a PartialItemName, which can omit the database name and/or the schema name. Partial names can be converted into full names via a complicated resolution process documented by the CatalogState::resolve method.

The catalog also maintains special “ambient schemas”: virtual schemas, implicitly present in all databases, that house various system views. The big examples of ambient schemas are pg_catalog and mz_catalog.

Implementations§

source§

impl Catalog

source

pub fn render_notices( &self, df_meta: DataflowMetainfo<RawOptimizerNotice>, notice_ids: Vec<GlobalId>, item_id: Option<GlobalId> ) -> DataflowMetainfo<Arc<OptimizerNotice>>

Transform the DataflowMetainfo by rendering an OptimizerNotice for each RawOptimizerNotice.

source§

impl Catalog

source

pub fn initialize_state<'a>( config: StateConfig, storage: &'a mut Box<dyn DurableCatalogState> ) -> BoxFuture<'a, Result<(CatalogState, BuiltinMigrationMetadata, String), AdapterError>>

Initializes a CatalogState. Separate from Catalog::open to avoid depending on state external to a mz_catalog::durable::DurableCatalogState (for example: no mz_secrets::SecretsReader).

The passed in previous_ts must be the highest read timestamp for Timeline::EpochMilliseconds known across all timestamp oracles.

BOXED FUTURE: As of Nov 2023 the returned Future from this function was 7.5KB. This would get stored on the stack which is bad for runtime performance, and blow up our stack usage. Because of that we purposefully move this Future onto the heap (i.e. Box it).

source

pub fn open( config: Config<'_>, boot_ts_not_linearizable: Timestamp ) -> BoxFuture<'static, Result<(Catalog, BuiltinMigrationMetadata, Vec<BuiltinTableUpdate>, String), AdapterError>>

Opens or creates a catalog that stores data at path.

The passed in boot_ts_not_linearizable is not linearizable, we do not persist this timestamp before using it. Think hard about this fact if you ever feel the need to use this for something that needs to be linearizable.

Returns the catalog, metadata about builtin objects that have changed schemas since last restart, a list of updates to builtin tables that describe the initial state of the catalog, and the version of the catalog before any migrations were performed.

BOXED FUTURE: As of Nov 2023 the returned Future from this function was 17KB. This would get stored on the stack which is bad for runtime performance, and blow up our stack usage. Because of that we purposefully move this Future onto the heap (i.e. Box it).

source

pub fn load_catalog_items<'a>( tx: &mut Transaction<'a>, state: &CatalogState ) -> Result<CatalogState, Error>

Takes a catalog which only has items in its on-disk storage (“unloaded”) and cannot yet resolve names, and returns a catalog loaded with those items.

This function requires transactions to support loading a catalog with the transaction’s currently in-flight updates to existing catalog objects, which is necessary for at least one catalog migration.

TODO(justin): it might be nice if these were two different types.

source

pub async fn expire(self)

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

source§

impl Catalog

source

pub fn set_optimized_plan( &mut self, id: GlobalId, plan: DataflowDescription<OptimizedMirRelationExpr> )

Set the optimized plan for the item identified by id.

source

pub fn set_physical_plan( &mut self, id: GlobalId, plan: DataflowDescription<Plan> )

Set the optimized plan for the item identified by id.

source

pub fn try_get_optimized_plan( &self, id: &GlobalId ) -> Option<&DataflowDescription<OptimizedMirRelationExpr>>

Try to get the optimized plan for the item identified by id.

source

pub fn try_get_physical_plan( &self, id: &GlobalId ) -> Option<&DataflowDescription<Plan>>

Try to get the optimized plan for the item identified by id.

source

pub fn set_dataflow_metainfo( &mut self, id: GlobalId, metainfo: DataflowMetainfo<Arc<OptimizerNotice>> )

Set the DataflowMetainfo for the item identified by id.

source

pub fn try_get_dataflow_metainfo( &self, id: &GlobalId ) -> Option<&DataflowMetainfo<Arc<OptimizerNotice>>>

Try to get the DataflowMetainfo for the item identified by id.

source

pub fn drop_plans_and_metainfos( &mut self, drop_ids: &BTreeSet<GlobalId> ) -> BTreeSet<Arc<OptimizerNotice>>

Drop all optimized and physical plans and DataflowMetainfos for the item identified by id.

Ignore requests for non-existing plans or DataflowMetainfos.

Return a set containing all dropped notices. Note that if for some reason we end up with two identical notices being dropped by the same call, the result will contain only one instance of that notice.

source§

impl Catalog

source

pub fn transient_revision(&self) -> u64

Returns the catalog’s transient revision, which starts at 1 and is incremented on every change. This is not persisted to disk, and will restart on every load.

source

pub async fn with_debug<F, Fut, T>(now: NowFn, f: F) -> T
where F: FnOnce(Catalog) -> Fut, Fut: Future<Output = T>,

Creates a debug catalog from the current COCKROACH_URL with parameters set appropriately for debug contexts, like in tests.

WARNING! This function can arbitrarily fail because it does not make any effort to adjust the catalog’s contents’ structure or semantics to the currently running version, i.e. it does not apply any migrations.

This function must not be called in production contexts. Use Catalog::open with appropriately set configuration parameters instead.

source

pub async fn open_debug_catalog( persist_client: PersistClient, organization_id: Uuid, now: NowFn, environment_id: Option<EnvironmentId> ) -> Result<Catalog, Error>

Opens a debug catalog.

See Catalog::with_debug.

source

pub async fn open_debug_read_only_persist_catalog_config( persist_client: PersistClient, now: NowFn, environment_id: EnvironmentId, system_parameter_defaults: BTreeMap<String, String> ) -> Result<Catalog, Error>

Opens a read only debug persist backed catalog defined by persist_client and organization_id.

See Catalog::with_debug.

source

pub fn for_session<'a>(&'a self, session: &'a Session) -> ConnCatalog<'a>

source

pub fn for_sessionless_user(&self, role_id: RoleId) -> ConnCatalog<'_>

source

pub fn for_system_session(&self) -> ConnCatalog<'_>

source

pub async fn allocate_user_id(&self) -> Result<GlobalId, Error>

source

pub async fn allocate_user_cluster_id(&self) -> Result<ClusterId, Error>

source

pub async fn allocate_user_replica_id(&self) -> Result<ReplicaId, Error>

source

pub async fn get_next_system_replica_id(&self) -> Result<u64, Error>

Get the next system replica id without allocating it.

source

pub async fn get_next_user_replica_id(&self) -> Result<u64, Error>

Get the next user replica id without allocating it.

source

pub fn resolve_database( &self, database_name: &str ) -> Result<&Database, SqlCatalogError>

source

pub fn resolve_schema( &self, current_database: Option<&DatabaseId>, database_name: Option<&str>, schema_name: &str, conn_id: &ConnectionId ) -> Result<&Schema, SqlCatalogError>

source

pub fn resolve_schema_in_database( &self, database_spec: &ResolvedDatabaseSpecifier, schema_name: &str, conn_id: &ConnectionId ) -> Result<&Schema, SqlCatalogError>

source

pub fn resolve_search_path( &self, session: &Session ) -> Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>

source

pub fn resolve_entry( &self, current_database: Option<&DatabaseId>, search_path: &Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>, name: &PartialItemName, conn_id: &ConnectionId ) -> Result<&CatalogEntry, SqlCatalogError>

Resolves name to a non-function CatalogEntry.

source

pub fn resolve_builtin_table(&self, builtin: &'static BuiltinTable) -> GlobalId

Resolves a BuiltinTable.

source

pub fn resolve_builtin_log(&self, builtin: &'static BuiltinLog) -> GlobalId

Resolves a BuiltinLog.

source

pub fn resolve_builtin_storage_collection( &self, builtin: &'static BuiltinSource ) -> GlobalId

Resolves a BuiltinSource.

source

pub fn resolve_function( &self, current_database: Option<&DatabaseId>, search_path: &Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>, name: &PartialItemName, conn_id: &ConnectionId ) -> Result<&CatalogEntry, SqlCatalogError>

Resolves name to a function CatalogEntry.

source

pub fn resolve_type( &self, current_database: Option<&DatabaseId>, search_path: &Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>, name: &PartialItemName, conn_id: &ConnectionId ) -> Result<&CatalogEntry, SqlCatalogError>

Resolves name to a type CatalogEntry.

source

pub fn resolve_cluster(&self, name: &str) -> Result<&Cluster, SqlCatalogError>

source

pub fn resolve_builtin_cluster(&self, cluster: &BuiltinCluster) -> &Cluster

Resolves a Cluster for a BuiltinCluster.

Panics
source

pub fn get_mz_introspections_cluster_id(&self) -> &ClusterId

source

pub fn resolve_target_cluster( &self, target_cluster: TargetCluster, session: &Session ) -> Result<&Cluster, AdapterError>

Resolves a Cluster for a TargetCluster.

source

pub fn active_cluster( &self, session: &Session ) -> Result<&Cluster, AdapterError>

source

pub fn state(&self) -> &CatalogState

source

pub fn resolve_full_name( &self, name: &QualifiedItemName, conn_id: Option<&ConnectionId> ) -> FullItemName

source

pub fn try_get_entry(&self, id: &GlobalId) -> Option<&CatalogEntry>

source

pub fn get_entry(&self, id: &GlobalId) -> &CatalogEntry

source

pub fn get_schema( &self, database_spec: &ResolvedDatabaseSpecifier, schema_spec: &SchemaSpecifier, conn_id: &ConnectionId ) -> &Schema

source

pub fn get_mz_catalog_schema_id(&self) -> &SchemaId

source

pub fn get_pg_catalog_schema_id(&self) -> &SchemaId

source

pub fn get_information_schema_id(&self) -> &SchemaId

source

pub fn get_mz_internal_schema_id(&self) -> &SchemaId

source

pub fn get_mz_unsafe_schema_id(&self) -> &SchemaId

source

pub fn get_database(&self, id: &DatabaseId) -> &Database

source

pub fn try_get_role(&self, id: &RoleId) -> Option<&Role>

source

pub fn get_role(&self, id: &RoleId) -> &Role

source

pub fn try_get_role_by_name(&self, role_name: &str) -> Option<&Role>

source

pub fn create_temporary_schema( &mut self, conn_id: &ConnectionId, owner_id: RoleId ) -> Result<(), Error>

Creates a new schema in the Catalog for temporary items indicated by the TEMPORARY or TEMP keywords.

source

pub fn drop_temp_item_ops(&mut self, conn_id: &ConnectionId) -> Vec<Op>

source

pub fn drop_temporary_schema( &mut self, conn_id: &ConnectionId ) -> Result<(), Error>

Drops schema for connection if it exists. Returns an error if it exists and has items. Returns Ok if conn_id’s temp schema does not exist.

source

pub fn find_available_cluster_name(&self, name: &str) -> String

source

pub fn concretize_replica_location( &self, location: ReplicaLocation, allowed_sizes: &Vec<String>, allowed_availability_zones: Option<&[String]> ) -> Result<ReplicaLocation, Error>

source

pub fn cluster_replica_sizes(&self) -> &ClusterReplicaSizeMap

source

pub fn get_privileges( &self, id: &SystemObjectId, conn_id: &ConnectionId ) -> Option<&PrivilegeMap>

Returns the privileges of an object by its ID.

source

pub async fn transact( &mut self, oracle_write_ts: Timestamp, session: Option<&ConnMeta>, ops: Vec<Op> ) -> Result<TransactionResult, AdapterError>

source

pub async fn confirm_leadership(&self) -> Result<(), AdapterError>

source

pub fn introspection_dependencies(&self, id: GlobalId) -> Vec<GlobalId>

Return the ids of all log sources the given object depends on.

source

pub fn dump(&self) -> Result<CatalogDump, Error>

Serializes the catalog’s in-memory state.

There are no guarantees about the format of the serialized state, except that the serialized state for two identical catalogs will compare identically.

source

pub fn check_consistency(&self) -> Result<(), Value>

Checks the Catalogs internal consistency.

Returns a JSON object describing the inconsistencies, if there are any.

source

pub fn config(&self) -> &CatalogConfig

source

pub fn entries(&self) -> impl Iterator<Item = &CatalogEntry>

source

pub fn user_connections(&self) -> impl Iterator<Item = &CatalogEntry>

source

pub fn user_tables(&self) -> impl Iterator<Item = &CatalogEntry>

source

pub fn user_sources(&self) -> impl Iterator<Item = &CatalogEntry>

source

pub fn user_sinks(&self) -> impl Iterator<Item = &CatalogEntry>

source

pub fn user_materialized_views(&self) -> impl Iterator<Item = &CatalogEntry>

source

pub fn user_secrets(&self) -> impl Iterator<Item = &CatalogEntry>

source

pub fn clusters(&self) -> impl Iterator<Item = &Cluster>

source

pub fn get_cluster(&self, cluster_id: ClusterId) -> &Cluster

source

pub fn try_get_cluster(&self, cluster_id: ClusterId) -> Option<&Cluster>

source

pub fn user_clusters(&self) -> impl Iterator<Item = &Cluster>

source

pub fn get_cluster_replica( &self, cluster_id: ClusterId, replica_id: ReplicaId ) -> &ClusterReplica

source

pub fn user_cluster_replicas(&self) -> impl Iterator<Item = &ClusterReplica>

source

pub fn databases(&self) -> impl Iterator<Item = &Database>

source

pub fn user_roles(&self) -> impl Iterator<Item = &Role>

source

pub fn system_privileges(&self) -> &PrivilegeMap

source

pub fn default_privileges( &self ) -> impl Iterator<Item = (&DefaultPrivilegeObject, impl Iterator<Item = &DefaultPrivilegeAclItem>)>

source

pub async fn allocate_introspection_sources( &self ) -> Vec<(&'static BuiltinLog, GlobalId)>

Allocate ids for introspection sources. Called once per cluster creation.

source

pub fn pack_item_update( &self, id: GlobalId, diff: Diff ) -> Vec<BuiltinTableUpdate>

source

pub fn system_config(&self) -> &SystemVars

source

pub fn ensure_not_reserved_role(&self, role_id: &RoleId) -> Result<(), Error>

source

pub fn ensure_grantable_role(&self, role_id: &RoleId) -> Result<(), Error>

source

pub fn ensure_not_system_role(&self, role_id: &RoleId) -> Result<(), Error>

source

pub fn ensure_not_reserved_object( &self, object_id: &ObjectId, conn_id: &ConnectionId ) -> Result<(), Error>

Trait Implementations§

source§

impl Clone for Catalog

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Catalog

source§

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

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> 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> DynClone for T
where T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

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<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> 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<T> ProgressEventTimestamp for T
where T: Data + Debug + Any,

source§

fn as_any(&self) -> &(dyn Any + 'static)

Upcasts this ProgressEventTimestamp to Any. Read more
source§

fn type_name(&self) -> &'static str

Returns the name of the concrete type of this object. Read more
source§

impl<P, R> ProtoType<R> for P
where R: RustType<P>,

source§

impl<T> PushInto<Vec<T>> for T

source§

fn push_into(self, target: &mut Vec<T>)

Push self into the target container.
source§

impl<T> Same for T

§

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,

§

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

§

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
source§

impl<T> Data for T
where T: Clone + 'static,