Skip to main content

Inserter

Struct Inserter 

Source
pub struct Inserter {
    catalog_manager: CatalogManagerRef,
    pub(crate) partition_manager: PartitionRuleManagerRef,
    pub(crate) node_manager: NodeManagerRef,
    pub(crate) table_flownode_set_cache: TableFlownodeSetCacheRef,
    auto_create_table: bool,
    pending_rows_batcher: Option<Arc<dyn PendingRowsBatcher>>,
}

Fields§

§catalog_manager: CatalogManagerRef§partition_manager: PartitionRuleManagerRef§node_manager: NodeManagerRef§table_flownode_set_cache: TableFlownodeSetCacheRef§auto_create_table: bool

Server-side upper bound for auto table creation on write. When false, missing tables are never auto-created regardless of the per-request auto_create_table hint. When true, the hint still applies.

§pending_rows_batcher: Option<Arc<dyn PendingRowsBatcher>>

Implementations§

Source§

impl Inserter

Source

pub async fn flush_bulk_batch( &self, table_info: TableInfoRef, batch: RecordBatch, ctx: QueryContextRef, ) -> Result<AffectedRows>

Routes and writes a prepared table batch, returning the affected row count.

Callers must exclude instant-TTL tables and handle Flow notifications after successful writes. This execution helper does not perform either step.

Source

pub async fn handle_bulk_insert( &self, table: TableRef, raw_flight_data: FlightData, record_batch: RecordBatch, schema_bytes: Bytes, skip_wal: bool, channel: Channel, ) -> Result<AffectedRows>

Handle bulk insert request.

Source

fn maybe_update_flow_dirty_window( &self, table_info: TableInfoRef, record_batch: RecordBatch, )

Source§

impl Inserter

Source

pub async fn can_batch_metric_rows( &self, requests: &RowInsertRequests, ctx: &QueryContextRef, physical_table: &str, ) -> Result<bool>

Checks the assumptions of the logical bulk path without changing tables. Unsupported requests retain ordinary insertion, including schema policy, defaults, instant TTL and row-based Flow delivery.

Source

pub async fn meter_row_inserts( requests: &mut RowInsertRequests, ctx: &QueryContextRef, ) -> Result<u64>

Meters an original logical-table request before bulk routing, without cloning its rows or changing the request boundary used for accounting.

Source

pub fn new( catalog_manager: CatalogManagerRef, partition_manager: PartitionRuleManagerRef, node_manager: NodeManagerRef, table_flownode_set_cache: TableFlownodeSetCacheRef, auto_create_table: bool, ) -> Self

Source

pub fn with_pending_rows_batcher( self, batcher: Option<Arc<dyn PendingRowsBatcher>>, ) -> Self

Installs the shared batcher; callers explicitly select its ingestion entry point.

Source

pub async fn handle_column_inserts( &self, requests: InsertRequests, ctx: QueryContextRef, statement_executor: &StatementExecutor, ) -> Result<Output>

Source

pub async fn handle_row_inserts( &self, requests: RowInsertRequests, ctx: QueryContextRef, statement_executor: &StatementExecutor, accommodate_existing_schema: bool, is_single_value: bool, ) -> Result<Output>

Handles row inserts request and creates a physical table on demand.

Source

pub async fn handle_log_inserts( &self, requests: RowInsertRequests, ctx: QueryContextRef, statement_executor: &StatementExecutor, ) -> Result<Output>

Handles row inserts request and creates a log table on demand.

Source

pub async fn handle_trace_inserts( &self, requests: RowInsertRequests, ctx: QueryContextRef, statement_executor: &StatementExecutor, ) -> Result<Output>

Source

pub async fn handle_last_non_null_inserts( &self, requests: RowInsertRequests, ctx: QueryContextRef, statement_executor: &StatementExecutor, accommodate_existing_schema: bool, is_single_value: bool, ) -> Result<Output>

Handles row inserts request and creates a table with last_non_null merge mode on demand.

Source

async fn handle_row_inserts_with_create_type( &self, requests: RowInsertRequests, ctx: QueryContextRef, statement_executor: &StatementExecutor, create_type: AutoCreateTableType, accommodate_existing_schema: bool, is_single_value: bool, ) -> Result<Output>

Handles row inserts request with specified AutoCreateTableType.

Source

async fn submit_pending_rows( &self, requests: RowInsertRequests, table_infos: HashMap<TableId, Arc<TableInfo>>, ctx: QueryContextRef, batcher: &Arc<dyn PendingRowsBatcher>, ) -> Result<Output>

Source

pub async fn handle_metric_row_inserts( &self, requests: RowInsertRequests, ctx: QueryContextRef, statement_executor: &StatementExecutor, physical_table: String, ) -> Result<Output>

Handles row inserts request with metric engine.

Source

fn table_batcher( &self, table_info: &TableInfoRef, ctx: &QueryContextRef, ) -> Option<&Arc<dyn PendingRowsBatcher>>

Source

async fn submit_table_rows( &self, rows: Rows, table_info: TableInfoRef, ctx: QueryContextRef, batcher: &Arc<dyn PendingRowsBatcher>, ) -> Result<Output>

Source

pub async fn handle_table_insert( &self, request: TableInsertRequest, ctx: QueryContextRef, ) -> Result<Output>

Source

pub async fn handle_statement_insert( &self, insert: &Insert, ctx: &QueryContextRef, ) -> Result<Output>

Source§

impl Inserter

Source

async fn do_request( &self, requests: InstantAndNormalInsertRequests, table_infos: &HashMap<TableId, Arc<TableInfo>>, ctx: &QueryContextRef, ) -> Result<Output>

Source

async fn group_requests_by_peer( &self, requests: RegionInsertRequests, ) -> Result<HashMap<Peer, RegionInsertRequests>>

Source

fn auto_create_disabled_reason( &self, ctx: &QueryContextRef, ) -> Result<Option<&'static str>>

Returns Some(reason) if the config or request hint disables automatic table creation. Exempt private system tables are handled by Self::is_auto_create_exempt_private_table.

Source

fn is_auto_create_exempt_private_table(schema: &str, table: &str) -> bool

Returns whether a private system table may infer and reconcile its schema even when automatic table creation is disabled.

Source

pub async fn ensure_bulk_insert_schema( &self, table: TableRef, request_schema: &ArrowSchema, ctx: &QueryContextRef, statement_executor: &StatementExecutor, ) -> Result<TableRef>

Adds missing columns from a bulk stream’s schema and returns the refreshed table. Call once when initializing the stream, before writing its first batch. Does not infer new nested or dictionary columns.

Source

pub async fn ensure_trace_table_on_demand( &self, table_name: &str, request_schema: Vec<ColumnSchema>, alter_existing: bool, ctx: &QueryContextRef, statement_executor: &StatementExecutor, ) -> Result<()>

Ensures a trace table has the request-global schema without requiring a padded data row to drive on-demand creation or alteration. When alter_existing is false, a table created after planning is left for the caller to re-plan.

Source

async fn create_or_alter_tables_on_demand( &self, requests: &mut RowInsertRequests, ctx: &QueryContextRef, auto_create_table_type: AutoCreateTableType, statement_executor: &StatementExecutor, accommodate_existing_schema: bool, is_single_value: bool, align_time_index_unit: Option<TimeUnit>, ) -> Result<CreateAlterTableResult>

Creates or alter tables on demand:

  • if table does not exist, create table by inferred CreateExpr
  • if table exist, check if schema matches. If any new column found, alter table by inferred AlterExpr

Returns a mapping from table name to table id, where table name is the table name involved in the requests. This mapping is used in the conversion of RowToRegion.

accommodate_existing_schema is used to determine if the existing schema should override the new schema. It only works for TIME_INDEX and single VALUE columns. This is for the case where the user creates a table with custom schema, and then inserts data with endpoints that have default schema setting, like prometheus remote write. This will modify the RowInsertRequests in place. is_single_value indicates whether the default schema only contains single value column so we can accommodate it.

align_time_index_unit is the selected physical metric table’s time index unit; passing Some (metric engine path only) rewrites each request’s time index column, inside this function’s existing table lookups (no extra catalog access): existing destination tables are converted to their own unit, and new tables to the given unit.

Source

async fn create_physical_table_on_demand( &self, ctx: &QueryContextRef, physical_table: String, statement_executor: &StatementExecutor, ) -> Result<TableRef>

Source

async fn get_table( &self, catalog: &str, schema: &str, table: &str, ) -> Result<Option<TableRef>>

Source

fn get_create_table_expr_on_demand( &self, req: &RowInsertRequest, create_type: &AutoCreateTableType, ctx: &QueryContextRef, semantic_index: Option<&PerTableSemanticIndex>, ) -> Result<CreateTableExpr>

Source

fn get_alter_table_expr_on_demand( &self, req: &mut RowInsertRequest, table: &TableRef, ctx: &QueryContextRef, accommodate_existing_schema: bool, is_single_value: bool, alter_existing: bool, ) -> Result<Option<AlterTableExpr>>

Returns an alter table expression if it finds new columns in the request. When accommodate_existing_schema is false, it always adds columns if not exist. When accommodate_existing_schema is true, it may modify the input req to accommodate it with existing schema. See create_or_alter_tables_on_demand for more details. When is_single_value is true, it also rejects native-histogram/float kind changes. When both options are true, it considers fields when modifying the input req.

Source

async fn create_physical_table( &self, create_table_expr: CreateTableExpr, partitions: Option<Partitions>, ctx: &QueryContextRef, statement_executor: &StatementExecutor, ) -> Result<TableRef>

Creates a table with options.

Source

async fn create_logical_tables( &self, create_table_exprs: Vec<CreateTableExpr>, ctx: &QueryContextRef, statement_executor: &StatementExecutor, ) -> Result<Vec<TableRef>>

Source

pub fn node_manager(&self) -> &NodeManagerRef

Source

pub fn partition_manager(&self) -> &PartitionRuleManagerRef

Source

pub fn table_flownode_set_cache(&self) -> &TableFlownodeSetCacheRef

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

impl<T> Conv for T

§

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

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

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

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.

§

impl<T> FutureExt for T

§

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

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

fn with_current_context(self) -> WithContext<Self>

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

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

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
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

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

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

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

§

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
§

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
§

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
§

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
§

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
§

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

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

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

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

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

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

§

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
§

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

Source§

type Output = T

Should always be Self
§

impl<T> ServiceExt for T

§

fn propagate_header(self, header: HeaderName) -> PropagateHeader<Self>
where Self: Sized,

Propagate a header from the request to the response. Read more
§

fn add_extension<T>(self, value: T) -> AddExtension<Self, T>
where Self: Sized,

Add some shareable value to request extensions. Read more
§

fn map_request_body<F>(self, f: F) -> MapRequestBody<Self, F>
where Self: Sized,

Apply a transformation to the request body. Read more
§

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

Apply a transformation to the response body. Read more
§

fn compression(self) -> Compression<Self>
where Self: Sized,

Compresses response bodies. Read more
§

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

Decompress response bodies. Read more
§

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

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

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

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

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

Follow redirect resposes using the Standard policy. Read more
§

fn sensitive_headers( self, headers: impl IntoIterator<Item = HeaderName>, ) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>
where Self: Sized,

Mark headers as sensitive on both requests and responses. Read more
§

fn sensitive_request_headers( self, headers: impl IntoIterator<Item = HeaderName>, ) -> SetSensitiveRequestHeaders<Self>
where Self: Sized,

Mark headers as sensitive on requests. Read more
§

fn sensitive_response_headers( self, headers: impl IntoIterator<Item = HeaderName>, ) -> SetSensitiveResponseHeaders<Self>
where Self: Sized,

Mark headers as sensitive on responses. Read more
§

fn override_request_header<M>( self, header_name: HeaderName, make: M, ) -> SetRequestHeader<Self, M>
where Self: Sized,

Insert a header into the request. Read more
§

fn append_request_header<M>( self, header_name: HeaderName, make: M, ) -> SetRequestHeader<Self, M>
where Self: Sized,

Append a header into the request. Read more
§

fn insert_request_header_if_not_present<M>( self, header_name: HeaderName, make: M, ) -> SetRequestHeader<Self, M>
where Self: Sized,

Insert a header into the request, if the header is not already present. Read more
§

fn override_response_header<M>( self, header_name: HeaderName, make: M, ) -> SetResponseHeader<Self, M>
where Self: Sized,

Insert a header into the response. Read more
§

fn append_response_header<M>( self, header_name: HeaderName, make: M, ) -> SetResponseHeader<Self, M>
where Self: Sized,

Append a header into the response. Read more
§

fn insert_response_header_if_not_present<M>( self, header_name: HeaderName, make: M, ) -> SetResponseHeader<Self, M>
where Self: Sized,

Insert a header into the response, if the header is not already present. Read more
§

fn set_request_id<M>( self, header_name: HeaderName, make_request_id: M, ) -> SetRequestId<Self, M>
where Self: Sized, M: MakeRequestId,

Add request id header and extension. Read more
§

fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>
where Self: Sized, M: MakeRequestId,

Add request id header and extension, using x-request-id as the header name. Read more
§

fn propagate_request_id( self, header_name: HeaderName, ) -> PropagateRequestId<Self>
where Self: Sized,

Propgate request ids from requests to responses. Read more
§

fn propagate_x_request_id(self) -> PropagateRequestId<Self>
where Self: Sized,

Propgate request ids from requests to responses, using x-request-id as the header name. Read more
§

fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>
where Self: Sized,

Catch panics and convert them into 500 Internal Server responses. Read more
§

fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>
where Self: Sized,

Intercept requests with over-sized payloads and convert them into 413 Payload Too Large responses. Read more
§

fn trim_trailing_slash(self) -> NormalizePath<Self>
where Self: Sized,

Remove trailing slashes from paths. Read more
§

fn append_trailing_slash(self) -> NormalizePath<Self>
where Self: Sized,

Append trailing slash to paths. Read more
§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
§

impl<T> Tap for T

§

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

Immutable access to a value. Read more
§

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

Mutable access to a value. Read more
§

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
§

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
§

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
§

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
§

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
§

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
§

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

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

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

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

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

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

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

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

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

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

impl<T> TryConv for T

§

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<G1, G2> Within<G2> for G1
where G2: Contains<G1>,

§

fn is_within(&self, b: &G2) -> bool

§

impl<T> Any for T
where T: Any,

§

impl<T> ErasedDestructor for T
where T: 'static,

§

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

§

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