Struct Catalog

Source
pub struct Catalog {
    state: CatalogState,
    plans: CatalogPlans,
    expr_cache_handle: Option<ExpressionCacheHandle>,
    storage: Arc<Mutex<Box<dyn DurableCatalogState>>>,
    transient_revision: u64,
}
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.

Fields§

§state: CatalogState§plans: CatalogPlans§expr_cache_handle: Option<ExpressionCacheHandle>§storage: Arc<Mutex<Box<dyn DurableCatalogState>>>§transient_revision: u64

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 async fn initialize_state<'a>( config: StateConfig, storage: &'a mut Box<dyn DurableCatalogState>, ) -> Result<InitializeStateResult, 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).

Source

pub fn open( config: Config<'_>, ) -> BoxFuture<'static, Result<OpenCatalogResult, AdapterError>>

Opens or creates a catalog that stores data at path.

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

async fn initialize_storage_state( &mut self, storage_collections: &Arc<dyn StorageCollections<Timestamp = Timestamp> + Send + Sync>, ) -> Result<(), CatalogError>

Initializes STORAGE to understand all shards that self expects to exist.

Note that this must be done before creating/rendering collections because the storage controller might not be aware of new system collections created between versions.

Source

pub async fn initialize_controller( &mut self, config: ControllerConfig, envd_epoch: NonZeroI64, read_only: bool, ) -> Result<Controller<Timestamp>, CatalogError>

mz_controller::Controller depends on durable catalog state to boot, so make it available and initialize the controller.

Source

pub async fn expire(self)

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

Source§

impl Catalog

Source§

impl Catalog

Source

pub(crate) fn get_timeline_context(&self, id: CatalogItemId) -> TimelineContext

Return the TimelineContext belonging to a CatalogItemId, if one exists.

Source

pub(crate) fn get_timeline_context_for_global_id( &self, id: GlobalId, ) -> TimelineContext

Return the TimelineContext belonging to a GlobalId, if one exists.

Source

pub fn partition_ids_by_timeline_context( &self, id_bundle: &CollectionIdBundle, ) -> impl Iterator<Item = (TimelineContext, CollectionIdBundle)> + use<>

Returns an iterator that partitions an id bundle by the TimelineContext that each id belongs to.

Source

pub(crate) fn ids_in_timeline(&self, timeline: &Timeline) -> CollectionIdBundle

Returns an id bundle containing all the ids in the give timeline.

Source

pub(crate) fn validate_timeline_context<I>( &self, ids: I, ) -> Result<TimelineContext, AdapterError>
where I: IntoIterator<Item = GlobalId>,

Return an error if the ids are from incompatible TimelineContexts. This should be used to prevent users from doing things that are either meaningless (joining data from timelines that have similar numbers with different meanings like two separate debezium topics) or will never complete (joining cdcv2 and realtime data).

Source

fn get_timeline_contexts<I>(&self, ids: I) -> BTreeSet<TimelineContext>
where I: IntoIterator<Item = CatalogItemId>,

Return the TimelineContexts belonging to a list of CatalogItemIds, if any exist.

Source§

impl Catalog

Source

fn should_audit_log_item(item: &CatalogItem) -> bool

Source

fn temporary_ids( &self, ops: &[Op], temporary_drops: BTreeSet<(&ConnectionId, String)>, ) -> Result<BTreeSet<CatalogItemId>, Error>

Gets CatalogItemIds of temporary items to be created, checks for name collisions within a connection id.

Source

pub async fn transact( &mut self, storage_collections: Option<&mut Arc<dyn StorageCollections<Timestamp = Timestamp> + Send + Sync>>, oracle_write_ts: Timestamp, session: Option<&ConnMeta>, ops: Vec<Op>, ) -> Result<TransactionResult, AdapterError>

Source

async fn transact_inner( storage_collections: Option<&mut Arc<dyn StorageCollections<Timestamp = Timestamp> + Send + Sync>>, oracle_write_ts: Timestamp, session: Option<&ConnMeta>, ops: Vec<Op>, temporary_ids: BTreeSet<CatalogItemId>, builtin_table_updates: &mut Vec<BuiltinTableUpdate>, audit_events: &mut Vec<VersionedEvent>, tx: &mut Transaction<'_>, state: &CatalogState, ) -> Result<Option<CatalogState>, AdapterError>

Performs the transaction described by ops and returns the new state of the catalog, if it has changed. If ops don’t result in a change in the state this method returns None.

§Panics
Source

async fn transact_op( oracle_write_ts: Timestamp, session: Option<&ConnMeta>, op: Op, temporary_ids: &BTreeSet<CatalogItemId>, audit_events: &mut Vec<VersionedEvent>, tx: &mut Transaction<'_>, state: &CatalogState, storage_collections_to_create: &mut BTreeSet<GlobalId>, storage_collections_to_drop: &mut BTreeSet<GlobalId>, storage_collections_to_register: &mut BTreeMap<GlobalId, ShardId>, ) -> Result<(Option<BuiltinTableUpdate>, Vec<(TemporaryItem, StateDiff)>), AdapterError>

Performs the transaction operation described by op. This function prepares the changes in tx, but does not update state. state will be updated when applying the durable changes.

Optionally returns a builtin table update for any builtin table updates than cannot be derived from the durable catalog state, and temporary item diffs. These are all very weird scenarios and ideally in the future don’t exist.

Source

fn log_update(state: &CatalogState, id: &CatalogItemId)

Source

fn update_privilege_owners( privileges: &mut PrivilegeMap, old_owner: RoleId, new_owner: RoleId, )

Update privileges to reflect the new owner. Based off of PostgreSQL’s implementation: https://github.com/postgres/postgres/blob/43a33ef54e503b61f269d088f2623ba3b9484ad7/src/backend/utils/adt/acl.c#L1078-L1177

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

pub(crate) fn invalidate_for_index( &self, ons: impl Iterator<Item = GlobalId>, ) -> BTreeSet<GlobalId>

Return a set of GlobalIds for items that need to have their cache entries invalidated as a result of creating new indexes on the items in ons.

When creating and inserting a new index, we need to invalidate some entries that may optimize to new expressions. When creating index i on object o, we need to invalidate the following objects:

  • o.
  • All compute objects that depend directly on o.
  • All compute objects that would directly depend on o, if all views were inlined.
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>(f: F) -> T
where F: FnOnce(Catalog) -> Fut, Fut: Future<Output = T>,

Creates a debug catalog from the current METADATA_BACKEND_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 with_debug_in_bootstrap<F, Fut, T>(f: F) -> T
where F: FnOnce(Catalog) -> Fut, Fut: Future<Output = T>,

Like Catalog::with_debug, but the catalog created believes that bootstrap is still in progress.

Source

pub async fn open_debug_catalog( persist_client: PersistClient, organization_id: Uuid, bootstrap_args: &BootstrapArgs, ) -> Result<Catalog, Error>

Opens a debug catalog.

See Catalog::with_debug.

Source

pub async fn open_debug_read_only_catalog( persist_client: PersistClient, organization_id: Uuid, bootstrap_args: &BootstrapArgs, ) -> Result<Catalog, Error>

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

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>, build_info: &'static BuildInfo, bootstrap_args: &BootstrapArgs, enable_expression_cache_override: Option<bool>, ) -> Result<Catalog, Error>

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

See Catalog::with_debug.

Source

async fn open_debug_catalog_inner( persist_client: PersistClient, storage: Box<dyn DurableCatalogState>, now: NowFn, environment_id: Option<EnvironmentId>, build_info: &'static BuildInfo, system_parameter_defaults: BTreeMap<String, String>, bootstrap_args: &BootstrapArgs, enable_expression_cache_override: Option<bool>, ) -> Result<Catalog, Error>

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

async fn storage<'a>(&'a self) -> MutexGuard<'a, Box<dyn DurableCatalogState>>

Source

pub async fn current_upper(&self) -> Timestamp

Source

pub async fn allocate_user_id( &self, commit_ts: Timestamp, ) -> Result<(CatalogItemId, GlobalId), Error>

Source

pub async fn allocate_user_ids( &self, amount: u64, commit_ts: Timestamp, ) -> Result<Vec<(CatalogItemId, GlobalId)>, Error>

Allocate amount many user IDs. See DurableCatalogState::allocate_user_ids.

Source

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

Source

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

Get the next user item ID without allocating it.

Source

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

Get the next system item ID without allocating it.

Source

pub async fn allocate_user_cluster_id( &self, commit_ts: Timestamp, ) -> Result<ClusterId, 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_replica_in_cluster( &self, cluster_id: &ClusterId, replica_name: &str, ) -> Result<&ClusterReplica, SqlCatalogError>

Source

pub fn resolve_system_schema(&self, name: &'static str) -> SchemaId

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

Resolves a BuiltinTable.

Source

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

Resolves a BuiltinLog.

Source

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

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_catalog_server_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: &CatalogItemId) -> Option<&CatalogEntry>

Source

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

Source

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

Source

pub fn get_entry_by_global_id(&self, id: &GlobalId) -> CatalogCollectionEntry

Source

pub fn get_global_ids<'a>( &'a self, id: &CatalogItemId, ) -> impl Iterator<Item = GlobalId> + use<'a>

Source

pub fn resolve_item_id(&self, id: &GlobalId) -> CatalogItemId

Source

pub fn try_resolve_item_id(&self, id: &GlobalId) -> Option<CatalogItemId>

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_introspection_schema_id(&self) -> SchemaId

Source

pub fn get_mz_unsafe_schema_id(&self) -> SchemaId

Source

pub fn system_schema_ids(&self) -> impl Iterator<Item = 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 try_get_role_auth_by_id(&self, id: &RoleId) -> Option<&RoleAuth>

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

fn item_exists_in_temp_schemas( &self, conn_id: &ConnectionId, item_name: &str, ) -> bool

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(crate) fn object_dependents( &self, object_ids: &Vec<ObjectId>, conn_id: &ConnectionId, ) -> Vec<ObjectId>

Source

fn full_name_detail(name: &FullItemName) -> FullNameV1

Source

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

Source

pub fn get_role_allowed_cluster_sizes( &self, role_id: &Option<RoleId>, ) -> Vec<String>

Source

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

Source

pub(crate) fn ensure_valid_replica_size( &self, allowed_sizes: &[String], size: &String, ) -> Result<(), 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 confirm_leadership(&self) -> Result<(), AdapterError>

Source

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

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 get_network_policy( &self, network_policy_id: NetworkPolicyId, ) -> &NetworkPolicy

Source

pub fn get_network_policy_by_name(&self, name: &str) -> Option<&NetworkPolicy>

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 try_get_cluster_replica( &self, cluster_id: ClusterId, replica_id: ReplicaId, ) -> Option<&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 user_continual_tasks(&self) -> impl Iterator<Item = &CatalogEntry>

Source

pub fn system_privileges(&self) -> &PrivilegeMap

Source

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

Source

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

Source

pub fn pack_storage_usage_update( &self, event: VersionedStorageUsage, diff: Diff, ) -> BuiltinTableUpdate

Source

pub fn system_config(&self) -> &SystemVars

Source

pub fn system_config_mut(&mut self) -> &mut 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_predefined_role(&self, role_id: &RoleId) -> Result<(), Error>

Source

pub fn ensure_not_reserved_network_policy( &self, network_policy_id: &NetworkPolicyId, ) -> Result<(), Error>

Source

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

Source

pub(crate) fn deserialize_plan_with_enable_for_item_parsing( &mut self, create_sql: &str, force_if_exists_skip: bool, ) -> Result<(Plan, ResolvedIds), AdapterError>

Source

pub(crate) fn update_expression_cache<'a, 'b>( &'a self, new_local_expressions: Vec<(GlobalId, LocalExpressions)>, new_global_expressions: Vec<(GlobalId, GlobalExpressions)>, ) -> BoxFuture<'b, ()>

Trait Implementations§

Source§

impl Clone for Catalog

Source§

fn clone(&self) -> Self

Returns a duplicate 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
Source§

impl OptimizerCatalog for Catalog

Source§

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

Source§

fn get_entry_by_item_id(&self, id: &CatalogItemId) -> &CatalogEntry

Source§

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

Source§

fn get_indexes_on( &self, id: GlobalId, cluster: ClusterId, ) -> Box<dyn Iterator<Item = (GlobalId, &Index)> + '_>

Returns all indexes on the given object and cluster known in the catalog.

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§

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

Source§

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

Gets the type name of self
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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> Downcast for T
where T: AsAny + ?Sized,

Source§

fn is<T>(&self) -> bool
where T: AsAny,

Returns true if the boxed type is the same as T. Read more
Source§

fn downcast_ref<T>(&self) -> Option<&T>
where T: AsAny,

Forward to the method defined on the type Any.
Source§

fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: AsAny,

Forward to the method defined on the type Any.
Source§

impl<T> DynClone for T
where T: Clone,

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> 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<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> 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> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

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

Source§

impl<T> Same for T

Source§

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

Source§

fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>
where Self: Sized,

Apply a transformation to the response body. Read more
Source§

fn decompression(self) -> Decompression<Self>
where Self: Sized,

Decompress response bodies. Read more
Source§

fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>
where Self: Sized,

High level tracing that classifies responses using HTTP status codes. Read more
Source§

fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>
where Self: Sized,

High level tracing that classifies responses using gRPC headers. Read more
Source§

fn follow_redirects(self) -> FollowRedirect<Self>
where Self: Sized,

Follow redirect resposes using the Standard policy. Read more
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = 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
Source§

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

Source§

impl<T> MaybeSend for T
where T: Send,