Struct mz_adapter::catalog::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_controller_state( &mut self, storage_controller: &mut dyn StorageController<Timestamp = Timestamp>, storage_collections_to_drop: BTreeSet<CatalogItemId>, ) -> Result<(), CatalogError>

Initializes the storage_controller 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, storage_collections_to_drop: BTreeSet<CatalogItemId>, ) -> Result<Controller<Timestamp>, CatalogError>

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

source

fn generate_builtin_migration_metadata( state: &CatalogState, txn: &mut Transaction<'_>, migrated_ids: Vec<CatalogItemId>, id_fingerprint_map: BTreeMap<CatalogItemId, String>, ) -> Result<BuiltinMigrationMetadata, Error>

The objects in the catalog form one or more DAGs (directed acyclic graph) via object dependencies. To migrate a builtin object we must drop that object along with all of its descendants, and then recreate that object along with all of its descendants using new CatalogItemIds. To achieve this we perform a DFS (depth first search) on the catalog items starting with the nodes that correspond to builtin objects that have changed schemas.

Objects need to be dropped starting from the leafs of the DAG going up towards the roots, and they need to be recreated starting at the roots of the DAG and going towards the leafs.

source

fn topological_sort<'a, 'b>( state: &'a CatalogState, id: CatalogItemId, visited_set: &'b mut BTreeSet<CatalogItemId>, ) -> Vec<&'a CatalogEntry>

source

async fn apply_builtin_migration( state: &mut CatalogState, txn: &mut Transaction<'_>, migration_metadata: &mut BuiltinMigrationMetadata, ) -> Result<Vec<BuiltinTableUpdate<&'static BuiltinTable>>, Error>

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

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_controller: Option<&mut dyn StorageController<Timestamp = Timestamp>>, oracle_write_ts: Timestamp, session: Option<&ConnMeta>, ops: Vec<Op>, ) -> Result<TransactionResult, AdapterError>

source

async fn transact_inner( storage_controller: Option<&mut dyn StorageController<Timestamp = Timestamp>>, 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: &mut CatalogState, ) -> Result<(), AdapterError>

Performs the transaction described by ops.

§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>, ) -> 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 fn source_read_policies( &self, id: CatalogItemId, ) -> Vec<(CatalogItemId, ReadPolicy<Timestamp>)>

For the Sources ids in ids, return the read policies for all ids and additional ids that propagate from them. Specifically, if ids contains a source, it and all of its source exports will be added to the result.

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 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, ) -> 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, ) -> 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>, version: Version, ) -> 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>, system_parameter_defaults: BTreeMap<String, String>, ) -> 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 allocate_user_id(&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) -> 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) -> &CatalogEntry

source

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

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

impl OptimizerCatalog for Catalog

source§

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

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§

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§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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> 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> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

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

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

source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
source§

impl<T, U> OverrideFrom<Option<&T>> for U
where U: OverrideFrom<T>,

source§

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

Override the configuration represented by Self with values from the given layer.
source§

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

source§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

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

Initializes a with the given initializer. Read more
source§

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

Dereferences the given pointer. Read more
source§

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

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

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

impl<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> Same for T

§

type Output = T

Should always be Self
source§

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

source§

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

The method of std::ops::AddAssign, for types that do not implement AddAssign.
source§

impl<T> Tap for T

source§

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

Immutable access to a value. Read more
source§

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

Mutable access to a value. Read more
source§

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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