Struct mz_adapter::catalog::CatalogState
source · pub struct CatalogState { /* private fields */ }
Expand description
The in-memory representation of the Catalog. This struct is not directly used to persist
metadata to persistent storage. For persistent metadata see
mz_catalog::durable::DurableCatalogState
.
Serialize
is implemented to create human readable dumps of the in-memory state, not for
storing the contents of this struct on disk.
Implementations§
source§impl CatalogState
impl CatalogState
pub fn pack_depends_update( &self, depender: GlobalId, dependee: GlobalId, diff: Diff ) -> BuiltinTableUpdate
pub fn pack_aws_privatelink_connection_update( &self, connection_id: GlobalId, aws_principal_context: &AwsPrincipalContext, diff: Diff ) -> BuiltinTableUpdate
pub fn pack_aws_connection_update( &self, connection_id: GlobalId, aws_config: &AwsConnection, diff: Diff ) -> Result<BuiltinTableUpdate, Error>
pub fn pack_op_update( &self, operator: &str, func_impl_details: FuncImplCatalogDetails, diff: Diff ) -> BuiltinTableUpdate
pub fn pack_audit_log_update( &self, event: &VersionedEvent, diff: Diff ) -> Result<BuiltinTableUpdate, Error>
pub fn pack_storage_usage_update( &self, VersionedStorageUsage::V1: &VersionedStorageUsage, diff: Diff ) -> BuiltinTableUpdate
pub fn pack_egress_ip_update( &self, ip: &Ipv4Addr ) -> Result<BuiltinTableUpdate, Error>
pub fn pack_replica_metric_updates( &self, replica_id: ReplicaId, updates: &[ServiceProcessMetrics], diff: Diff ) -> Vec<BuiltinTableUpdate>
pub fn pack_all_replica_size_updates(&self) -> Vec<BuiltinTableUpdate>
pub fn pack_subscribe_update( &self, id: GlobalId, subscribe: &ActiveSubscribe, diff: Diff ) -> BuiltinTableUpdate
pub fn pack_session_update( &self, conn: &ConnMeta, diff: Diff ) -> BuiltinTableUpdate
pub fn pack_default_privileges_update( &self, default_privilege_object: &DefaultPrivilegeObject, grantee: &RoleId, acl_mode: &AclMode, diff: Diff ) -> BuiltinTableUpdate
pub fn pack_system_privileges_update( &self, privileges: MzAclItem, diff: Diff ) -> BuiltinTableUpdate
pub fn pack_comment_update( &self, object_id: CommentObjectId, column_pos: Option<usize>, comment: &str, diff: Diff ) -> BuiltinTableUpdate
pub fn pack_webhook_source_update( &self, source_id: GlobalId, diff: Diff ) -> BuiltinTableUpdate
source§impl CatalogState
impl CatalogState
sourcepub fn check_consistency(&self) -> Result<(), Box<CatalogInconsistencies>>
pub fn check_consistency(&self) -> Result<(), Box<CatalogInconsistencies>>
Checks the CatalogState
to make sure we’re internally consistent.
source§impl CatalogState
impl CatalogState
pub fn empty() -> Self
pub fn for_session<'a>(&'a self, session: &'a Session) -> ConnCatalog<'a>
pub fn for_sessionless_user(&self, role_id: RoleId) -> ConnCatalog<'_>
pub fn for_system_session(&self) -> ConnCatalog<'_>
sourcepub fn dependent_indexes(&self, id: GlobalId) -> Vec<GlobalId>
pub fn dependent_indexes(&self, id: GlobalId) -> Vec<GlobalId>
Computes the IDs of any indexes that transitively depend on this catalog entry.
sourcepub fn transitive_uses(
&self,
id: GlobalId
) -> impl Iterator<Item = GlobalId> + '_
pub fn transitive_uses( &self, id: GlobalId ) -> impl Iterator<Item = GlobalId> + '_
Returns an iterator over the deduplicated identifiers of all
objects this catalog entry transitively depends on (where
“depends on” is meant in the sense of CatalogItem::uses
, rather than
CatalogItem::references
).
sourcepub fn introspection_dependencies(&self, id: GlobalId) -> Vec<GlobalId>
pub fn introspection_dependencies(&self, id: GlobalId) -> Vec<GlobalId>
Computes the IDs of any log sources this catalog entry transitively depends on.
pub fn resolve_full_name( &self, name: &QualifiedItemName, conn_id: Option<&ConnectionId> ) -> FullItemName
pub fn get_entry(&self, id: &GlobalId) -> &CatalogEntry
pub fn get_entry_mut(&mut self, id: &GlobalId) -> &mut CatalogEntry
pub fn get_item_by_name( &self, name: &QualifiedItemName, conn_id: &ConnectionId ) -> Option<&CatalogEntry>
pub fn get_type_by_name( &self, name: &QualifiedItemName, conn_id: &ConnectionId ) -> Option<&CatalogEntry>
pub fn try_get_entry(&self, id: &GlobalId) -> Option<&CatalogEntry>
pub fn get_role(&self, id: &RoleId) -> &Role
pub fn get_roles(&self) -> impl Iterator<Item = &RoleId>
sourcepub fn try_get_webhook_url(&self, id: &GlobalId) -> Option<Url>
pub fn try_get_webhook_url(&self, id: &GlobalId) -> Option<Url>
Returns the URL for POST-ing data to a webhook source, if id
corresponds to a webhook
source.
Note: Identifiers for the source, e.g. item name, are URL encoded.
sourcepub fn parse_view_item(&self, create_sql: String) -> Result<CatalogItem, Error>
pub fn parse_view_item(&self, create_sql: String) -> Result<CatalogItem, Error>
Parse a SQL string into a catalog view item with only a limited context.
sourcepub fn get_indexes_on(
&self,
id: GlobalId,
cluster: ClusterId
) -> impl Iterator<Item = (GlobalId, &Index)>
pub fn get_indexes_on( &self, id: GlobalId, cluster: ClusterId ) -> impl Iterator<Item = (GlobalId, &Index)>
Returns all indexes on the given object and cluster known in the catalog.
sourcepub fn get_system_configuration(&self, name: &str) -> Result<&dyn Var, Error>
pub fn get_system_configuration(&self, name: &str) -> Result<&dyn Var, Error>
Get system configuration name
.
pub fn get_schema( &self, database_spec: &ResolvedDatabaseSpecifier, schema_spec: &SchemaSpecifier, conn_id: &ConnectionId ) -> &Schema
pub fn get_mz_catalog_schema_id(&self) -> &SchemaId
pub fn get_pg_catalog_schema_id(&self) -> &SchemaId
pub fn get_information_schema_id(&self) -> &SchemaId
pub fn get_mz_internal_schema_id(&self) -> &SchemaId
pub fn get_mz_unsafe_schema_id(&self) -> &SchemaId
pub fn is_system_schema(&self, schema: &str) -> bool
pub fn is_system_schema_id(&self, id: &SchemaId) -> bool
pub fn is_system_schema_specifier(&self, spec: &SchemaSpecifier) -> bool
sourcepub fn create_temporary_schema(
&mut self,
conn_id: &ConnectionId,
owner_id: RoleId
) -> Result<(), Error>
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.
sourcepub fn resolve_builtin_table(&self, builtin: &'static BuiltinTable) -> GlobalId
pub fn resolve_builtin_table(&self, builtin: &'static BuiltinTable) -> GlobalId
Optimized lookup for a builtin table.
Panics if the builtin table doesn’t exist in the catalog.
sourcepub fn resolve_builtin_log(&self, builtin: &'static BuiltinLog) -> GlobalId
pub fn resolve_builtin_log(&self, builtin: &'static BuiltinLog) -> GlobalId
Optimized lookup for a builtin log.
Panics if the builtin log doesn’t exist in the catalog.
sourcepub fn resolve_builtin_source(
&self,
builtin: &'static BuiltinSource
) -> GlobalId
pub fn resolve_builtin_source( &self, builtin: &'static BuiltinSource ) -> GlobalId
Optimized lookup for a builtin storage collection.
Panics if the builtin storage collection doesn’t exist in the catalog.
sourcepub fn resolve_builtin_object<T: TypeReference>(
&self,
builtin: &Builtin<T>
) -> GlobalId
pub fn resolve_builtin_object<T: TypeReference>( &self, builtin: &Builtin<T> ) -> GlobalId
Optimized lookup for a builtin object.
Panics if the builtin object doesn’t exist in the catalog.
sourcepub fn resolve_builtin_type_references(
&self,
builtin: &BuiltinType<NameReference>
) -> BuiltinType<IdReference>
pub fn resolve_builtin_type_references( &self, builtin: &BuiltinType<NameReference> ) -> BuiltinType<IdReference>
Resolve a BuiltinType<NameReference>
to a BuiltinType<IdReference>
.
pub fn config(&self) -> &CatalogConfig
pub fn resolve_database( &self, database_name: &str ) -> Result<&Database, SqlCatalogError>
pub fn resolve_schema( &self, current_database: Option<&DatabaseId>, database_name: Option<&str>, schema_name: &str, conn_id: &ConnectionId ) -> Result<&Schema, SqlCatalogError>
sourcepub fn resolve_system_schema(&self, name: &str) -> SchemaId
pub fn resolve_system_schema(&self, name: &str) -> SchemaId
Optimized lookup for a system schema.
Panics if the system schema doesn’t exist in the catalog.
pub fn resolve_search_path( &self, session: &dyn SessionMetadata ) -> Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>
pub fn effective_search_path( &self, search_path: &[(ResolvedDatabaseSpecifier, SchemaSpecifier)], include_temp_schema: bool ) -> Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>
pub fn resolve_cluster(&self, name: &str) -> Result<&Cluster, SqlCatalogError>
pub fn resolve_builtin_cluster(&self, cluster: &BuiltinCluster) -> &Cluster
pub fn resolve_cluster_replica( &self, cluster_replica_name: &QualifiedReplica ) -> Result<&ClusterReplica, SqlCatalogError>
sourcepub fn resolve(
&self,
get_schema_entries: fn(_: &Schema) -> &BTreeMap<String, GlobalId>,
current_database: Option<&DatabaseId>,
search_path: &Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>,
name: &PartialItemName,
conn_id: &ConnectionId,
err_gen: fn(_: String) -> SqlCatalogError
) -> Result<&CatalogEntry, SqlCatalogError>
pub fn resolve( &self, get_schema_entries: fn(_: &Schema) -> &BTreeMap<String, GlobalId>, current_database: Option<&DatabaseId>, search_path: &Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>, name: &PartialItemName, conn_id: &ConnectionId, err_gen: fn(_: String) -> SqlCatalogError ) -> Result<&CatalogEntry, SqlCatalogError>
Resolves PartialItemName
into a CatalogEntry
.
If name
does not specify a database, the current_database
is used.
If name
does not specify a schema, then the schemas in search_path
are searched in order.
sourcepub fn resolve_entry(
&self,
current_database: Option<&DatabaseId>,
search_path: &Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>,
name: &PartialItemName,
conn_id: &ConnectionId
) -> Result<&CatalogEntry, SqlCatalogError>
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
.
sourcepub fn resolve_function(
&self,
current_database: Option<&DatabaseId>,
search_path: &Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>,
name: &PartialItemName,
conn_id: &ConnectionId
) -> Result<&CatalogEntry, SqlCatalogError>
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
.
sourcepub fn resolve_type(
&self,
current_database: Option<&DatabaseId>,
search_path: &Vec<(ResolvedDatabaseSpecifier, SchemaSpecifier)>,
name: &PartialItemName,
conn_id: &ConnectionId
) -> Result<&CatalogEntry, SqlCatalogError>
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
.
sourcepub fn system_config(&self) -> &SystemVars
pub fn system_config(&self) -> &SystemVars
Return current system configuration.
sourcepub fn dump(&self) -> Result<String, Error>
pub fn dump(&self) -> Result<String, 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.
pub fn availability_zones(&self) -> &[String]
pub fn concretize_replica_location( &self, location: ReplicaLocation, allowed_sizes: &Vec<String>, allowed_availability_zones: Option<&[String]> ) -> Result<ReplicaLocation, Error>
pub fn ensure_not_reserved_role(&self, role_id: &RoleId) -> Result<(), Error>
pub fn ensure_grantable_role(&self, role_id: &RoleId) -> Result<(), Error>
pub fn ensure_not_system_role(&self, role_id: &RoleId) -> Result<(), Error>
pub fn ensure_not_predefined_role(&self, role_id: &RoleId) -> Result<(), Error>
sourcepub fn storage_metadata(&self) -> &StorageMetadata
pub fn storage_metadata(&self) -> &StorageMetadata
Returns a read-only view of the current StorageMetadata
.
To write to this struct, you must use a Transaction
, followed by a
call to update_storage_metadata
.
Trait Implementations§
source§impl Clone for CatalogState
impl Clone for CatalogState
source§fn clone(&self) -> CatalogState
fn clone(&self) -> CatalogState
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl ConnectionResolver for CatalogState
impl ConnectionResolver for CatalogState
fn resolve_connection(&self, id: GlobalId) -> Connection<InlinedConnection>
source§impl Debug for CatalogState
impl Debug for CatalogState
Auto Trait Implementations§
impl Freeze for CatalogState
impl !RefUnwindSafe for CatalogState
impl Send for CatalogState
impl Sync for CatalogState
impl Unpin for CatalogState
impl !UnwindSafe for CatalogState
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<R, O, T> CopyOnto<ConsecutiveOffsetPairs<R, O>> for T
impl<R, O, T> CopyOnto<ConsecutiveOffsetPairs<R, O>> for T
source§fn copy_onto(
self,
target: &mut ConsecutiveOffsetPairs<R, O>
) -> <ConsecutiveOffsetPairs<R, O> as Region>::Index
fn copy_onto( self, target: &mut ConsecutiveOffsetPairs<R, O> ) -> <ConsecutiveOffsetPairs<R, O> as Region>::Index
source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T> FutureExt for T
impl<T> FutureExt for T
source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
source§impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> ProgressEventTimestamp for T
impl<T> ProgressEventTimestamp for T
source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
RustType::from_proto
.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
RustType::into_proto
.source§impl<T> Serialize for T
impl<T> Serialize for T
fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<Ok, Error>
source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.