pub struct PromPlanner {
    table_provider: DfTableSourceProvider,
    ctx: PromPlannerContext,
}Fields§
§table_provider: DfTableSourceProvider§ctx: PromPlannerContextImplementations§
Source§impl PromPlanner
 
impl PromPlanner
pub async fn stmt_to_plan_with_alias( table_provider: DfTableSourceProvider, stmt: &EvalStmt, alias: Option<String>, query_engine_state: &QueryEngineState, ) -> Result<LogicalPlan>
pub async fn prom_expr_to_plan( &mut self, prom_expr: &PromExpr, query_engine_state: &QueryEngineState, ) -> Result<LogicalPlan>
Sourcefn prom_expr_to_plan_inner<'life0, 'life1, 'life_self, 'async_recursion>(
    &'life_self mut self,
    prom_expr: &'life0 PromExpr,
    timestamp_fn: bool,
    query_engine_state: &'life1 QueryEngineState,
) -> Pin<Box<dyn Future<Output = Result<LogicalPlan>> + Send + 'async_recursion>>where
    'life0: 'async_recursion,
    'life1: 'async_recursion,
    'life_self: 'async_recursion,
 
fn prom_expr_to_plan_inner<'life0, 'life1, 'life_self, 'async_recursion>(
    &'life_self mut self,
    prom_expr: &'life0 PromExpr,
    timestamp_fn: bool,
    query_engine_state: &'life1 QueryEngineState,
) -> Pin<Box<dyn Future<Output = Result<LogicalPlan>> + Send + 'async_recursion>>where
    'life0: 'async_recursion,
    'life1: 'async_recursion,
    'life_self: 'async_recursion,
Converts a PromQL expression to a logical plan.
NOTE:
The timestamp_fn indicates whether the PromQL timestamp() function is being evaluated in the current context.
If true, the planner generates a logical plan that projects the timestamp (time index) column
as the value column for each input row, implementing the PromQL timestamp() function semantics.
If false, the planner generates the standard logical plan for the given PromQL expression.
async fn prom_subquery_expr_to_plan( &mut self, query_engine_state: &QueryEngineState, subquery_expr: &SubqueryExpr, ) -> Result<LogicalPlan>
async fn prom_aggr_expr_to_plan( &mut self, query_engine_state: &QueryEngineState, aggr_expr: &AggregateExpr, ) -> Result<LogicalPlan>
Sourceasync fn prom_topk_bottomk_to_plan(
    &mut self,
    aggr_expr: &AggregateExpr,
    input: LogicalPlan,
) -> Result<LogicalPlan>
 
async fn prom_topk_bottomk_to_plan( &mut self, aggr_expr: &AggregateExpr, input: LogicalPlan, ) -> Result<LogicalPlan>
Create logical plan for PromQL topk and bottomk expr.
async fn prom_unary_expr_to_plan( &mut self, query_engine_state: &QueryEngineState, unary_expr: &UnaryExpr, ) -> Result<LogicalPlan>
async fn prom_binary_expr_to_plan( &mut self, query_engine_state: &QueryEngineState, binary_expr: &PromBinaryExpr, ) -> Result<LogicalPlan>
fn prom_number_lit_to_plan( &mut self, number_literal: &NumberLiteral, ) -> Result<LogicalPlan>
fn prom_string_lit_to_plan( &mut self, string_literal: &StringLiteral, ) -> Result<LogicalPlan>
async fn prom_vector_selector_to_plan( &mut self, vector_selector: &VectorSelector, timestamp_fn: bool, ) -> Result<LogicalPlan>
Sourcefn create_timestamp_func_plan(
    &mut self,
    normalize: LogicalPlan,
) -> Result<LogicalPlan>
 
fn create_timestamp_func_plan( &mut self, normalize: LogicalPlan, ) -> Result<LogicalPlan>
Builds a projection plan for the PromQL timestamp() function.
Projects the time index column as the value column for each row.
§Arguments
normalize- Input [LogicalPlan] for the normalized series.
§Returns
Returns a Result<LogicalPlan> where the resulting logical plan projects the timestamp
column as the value column, along with the original tag and time index columns.
§Timestamp vs. Time Function
- 
Timestamp Function (
timestamp()): In PromQL, thetimestamp()function returns the timestamp (time index) of each sample as the value column. - 
Time Function (
time()): Thetime()function returns the evaluation time of the query as a scalar value. 
§Side Effects
Updates the planner context’s field columns to the timestamp column name.
async fn prom_matrix_selector_to_plan( &mut self, matrix_selector: &MatrixSelector, ) -> Result<LogicalPlan>
async fn prom_call_expr_to_plan( &mut self, query_engine_state: &QueryEngineState, call_expr: &Call, ) -> Result<LogicalPlan>
async fn prom_ext_expr_to_plan( &mut self, query_engine_state: &QueryEngineState, ext_expr: &Extension, ) -> Result<LogicalPlan>
Sourcefn preprocess_label_matchers(
    &mut self,
    label_matchers: &Matchers,
    name: &Option<String>,
) -> Result<Matchers>
 
fn preprocess_label_matchers( &mut self, label_matchers: &Matchers, name: &Option<String>, ) -> Result<Matchers>
Extract metric name from __name__ matcher and set it into PromPlannerContext.
Returns a new [Matchers] that doesn’t contain metric name matcher.
Each call to this function means new selector is started. Thus, the context will be reset at first.
Name rule:
- if 
nameis some, then the matchers MUST NOT contain__name__matcher. - if 
nameis none, then the matchers MAY contain NONE OR MULTIPLE__name__matchers. 
async fn selector_to_series_normalize_plan( &mut self, offset: &Option<Offset>, label_matchers: Matchers, is_range_selector: bool, ) -> Result<LogicalPlan>
Sourcefn agg_modifier_to_col(
    &mut self,
    input_schema: &DFSchemaRef,
    modifier: &Option<LabelModifier>,
    update_ctx: bool,
) -> Result<Vec<DfExpr>>
 
fn agg_modifier_to_col( &mut self, input_schema: &DFSchemaRef, modifier: &Option<LabelModifier>, update_ctx: bool, ) -> Result<Vec<DfExpr>>
Convert [LabelModifier] to [Column] exprs for aggregation. Timestamp column and tag columns will be included.
§Side effect
This method will also change the tag columns in ctx if update_ctx is true.
pub fn matchers_to_expr( label_matchers: Matchers, table_schema: &DFSchemaRef, ) -> Result<Vec<DfExpr>>
fn find_case_sensitive_column( schema: &DFSchemaRef, column: &str, ) -> Option<String>
fn table_ref(&self) -> Result<TableReference>
fn build_time_index_filter( &self, offset_duration: i64, ) -> Result<Option<DfExpr>>
Sourceasync fn create_table_scan_plan(
    &mut self,
    table_ref: TableReference,
) -> Result<LogicalPlan>
 
async fn create_table_scan_plan( &mut self, table_ref: TableReference, ) -> Result<LogicalPlan>
Sourceasync fn setup_context(&mut self) -> Result<Option<LogicalPlan>>
 
async fn setup_context(&mut self) -> Result<Option<LogicalPlan>>
Setup PromPlannerContext’s state fields.
Returns a logical plan for an empty metric.
Sourcefn setup_context_for_empty_metric(&mut self) -> Result<LogicalPlan>
 
fn setup_context_for_empty_metric(&mut self) -> Result<LogicalPlan>
Setup PromPlannerContext’s state fields for a non existent table without any rows.
fn create_function_args(&self, args: &[Box<PromExpr>]) -> Result<FunctionArgs>
Sourcefn create_function_expr(
    &mut self,
    func: &Function,
    other_input_exprs: Vec<DfExpr>,
    query_engine_state: &QueryEngineState,
) -> Result<(Vec<DfExpr>, Vec<String>)>
 
fn create_function_expr( &mut self, func: &Function, other_input_exprs: Vec<DfExpr>, query_engine_state: &QueryEngineState, ) -> Result<(Vec<DfExpr>, Vec<String>)>
Creates function expressions for projection and returns the expressions and new tags.
§Side Effects
This method will update PromPlannerContext’s fields and tags if needed.
Sourcefn validate_label_name(label_name: &str) -> Result<()>
 
fn validate_label_name(label_name: &str) -> Result<()>
Validate label name according to Prometheus specification. Label names must match the regex: [a-zA-Z_][a-zA-Z0-9_]* Additionally, label names starting with double underscores are reserved for internal use.
Sourcefn build_regexp_replace_label_expr(
    &self,
    other_input_exprs: &mut VecDeque<DfExpr>,
    query_engine_state: &QueryEngineState,
) -> Result<Option<(DfExpr, String)>>
 
fn build_regexp_replace_label_expr( &self, other_input_exprs: &mut VecDeque<DfExpr>, query_engine_state: &QueryEngineState, ) -> Result<Option<(DfExpr, String)>>
Build expr for label_replace function
Sourcefn build_concat_labels_expr(
    other_input_exprs: &mut VecDeque<DfExpr>,
    ctx: &PromPlannerContext,
    query_engine_state: &QueryEngineState,
) -> Result<(DfExpr, String)>
 
fn build_concat_labels_expr( other_input_exprs: &mut VecDeque<DfExpr>, ctx: &PromPlannerContext, query_engine_state: &QueryEngineState, ) -> Result<(DfExpr, String)>
Build expr for label_join function
fn create_time_index_column_expr(&self) -> Result<DfExpr>
fn create_tag_column_exprs(&self) -> Result<Vec<DfExpr>>
fn create_field_column_exprs(&self) -> Result<Vec<DfExpr>>
fn create_tag_and_time_index_column_sort_exprs(&self) -> Result<Vec<SortExpr>>
fn create_field_columns_sort_exprs(&self, asc: bool) -> Vec<SortExpr>
fn create_empty_values_filter_expr(&self) -> Result<DfExpr>
Sourcefn create_aggregate_exprs(
    &mut self,
    op: TokenType,
    param: &Option<Box<PromExpr>>,
    input_plan: &LogicalPlan,
) -> Result<(Vec<DfExpr>, Vec<DfExpr>)>
 
fn create_aggregate_exprs( &mut self, op: TokenType, param: &Option<Box<PromExpr>>, input_plan: &LogicalPlan, ) -> Result<(Vec<DfExpr>, Vec<DfExpr>)>
Creates a set of DataFusion DfExpr::AggregateFunction expressions for each value column using the specified aggregate function.
§Side Effects
This method modifies the value columns in the context by replacing them with the new columns created by the aggregate function application.
§Returns
Returns a tuple of (aggregate_expressions, previous_field_expressions) where:
aggregate_expressions: Expressions that apply the aggregate function to the original fieldsprevious_field_expressions: Original field expressions before aggregation. This is non-empty only when the operation iscount_values, as this operation requires preserving the original values for grouping.
fn get_param_value_as_str( op: TokenType, param: &Option<Box<PromExpr>>, ) -> Result<&str>
fn get_param_as_literal_expr( param: &Option<Box<PromExpr>>, op: Option<TokenType>, expected_type: Option<ArrowDataType>, ) -> Result<DfExpr>
Sourcefn create_window_exprs(
    &mut self,
    op: TokenType,
    group_exprs: Vec<DfExpr>,
    input_plan: &LogicalPlan,
) -> Result<Vec<DfExpr>>
 
fn create_window_exprs( &mut self, op: TokenType, group_exprs: Vec<DfExpr>, input_plan: &LogicalPlan, ) -> Result<Vec<DfExpr>>
Create [DfExpr::WindowFunction] expr for each value column with given window function.
Sourcefn try_build_float_literal(expr: &PromExpr) -> Option<f64>
 👎Deprecated: use Self::get_param_as_literal_expr instead. This is only for create_histogram_plan
fn try_build_float_literal(expr: &PromExpr) -> Option<f64>
Self::get_param_as_literal_expr instead. This is only for create_histogram_planTry to build a f64 from [PromExpr].
Sourceasync fn create_histogram_plan(
    &mut self,
    args: &PromFunctionArgs,
    query_engine_state: &QueryEngineState,
) -> Result<LogicalPlan>
 
async fn create_histogram_plan( &mut self, args: &PromFunctionArgs, query_engine_state: &QueryEngineState, ) -> Result<LogicalPlan>
Create a SPECIAL_HISTOGRAM_QUANTILE plan.
Sourceasync fn create_vector_plan(
    &mut self,
    args: &PromFunctionArgs,
) -> Result<LogicalPlan>
 
async fn create_vector_plan( &mut self, args: &PromFunctionArgs, ) -> Result<LogicalPlan>
Create a SPECIAL_VECTOR_FUNCTION plan
Sourceasync fn create_scalar_plan(
    &mut self,
    args: &PromFunctionArgs,
    query_engine_state: &QueryEngineState,
) -> Result<LogicalPlan>
 
async fn create_scalar_plan( &mut self, args: &PromFunctionArgs, query_engine_state: &QueryEngineState, ) -> Result<LogicalPlan>
Create a SCALAR_FUNCTION plan
Sourceasync fn create_absent_plan(
    &mut self,
    args: &PromFunctionArgs,
    query_engine_state: &QueryEngineState,
) -> Result<LogicalPlan>
 
async fn create_absent_plan( &mut self, args: &PromFunctionArgs, query_engine_state: &QueryEngineState, ) -> Result<LogicalPlan>
Create a SPECIAL_ABSENT_FUNCTION plan
Sourcefn try_build_literal_expr(expr: &PromExpr) -> Option<DfExpr>
 
fn try_build_literal_expr(expr: &PromExpr) -> Option<DfExpr>
Try to build a DataFusion Literal Expression from PromQL Expr, return
None if the input is not a literal expression.
fn try_build_special_time_expr_with_context( &self, expr: &PromExpr, ) -> Option<DfExpr>
Sourcefn prom_token_to_binary_expr_builder(
    token: TokenType,
) -> Result<Box<dyn Fn(DfExpr, DfExpr) -> Result<DfExpr>>>
 
fn prom_token_to_binary_expr_builder( token: TokenType, ) -> Result<Box<dyn Fn(DfExpr, DfExpr) -> Result<DfExpr>>>
Return a lambda to build binary expression from token.
Because some binary operator are function in DataFusion like atan2 or ^.
Sourcefn is_token_a_comparison_op(token: TokenType) -> bool
 
fn is_token_a_comparison_op(token: TokenType) -> bool
Check if the given op is a comparison operator.
Sourcefn is_token_a_set_op(token: TokenType) -> bool
 
fn is_token_a_set_op(token: TokenType) -> bool
Check if the given op is a set operator (UNION, INTERSECT and EXCEPT in SQL).
Sourcefn join_on_non_field_columns(
    &self,
    left: LogicalPlan,
    right: LogicalPlan,
    left_table_ref: TableReference,
    right_table_ref: TableReference,
    left_time_index_column: Option<String>,
    right_time_index_column: Option<String>,
    only_join_time_index: bool,
    modifier: &Option<BinModifier>,
) -> Result<LogicalPlan>
 
fn join_on_non_field_columns( &self, left: LogicalPlan, right: LogicalPlan, left_table_ref: TableReference, right_table_ref: TableReference, left_time_index_column: Option<String>, right_time_index_column: Option<String>, only_join_time_index: bool, modifier: &Option<BinModifier>, ) -> Result<LogicalPlan>
Build a inner join on time index column and tag columns to concat two logical plans.
When only_join_time_index == true we only join on the time index, because these two plan may not have the same tag columns
Sourcefn set_op_on_non_field_columns(
    &mut self,
    left: LogicalPlan,
    right: LogicalPlan,
    left_context: PromPlannerContext,
    right_context: PromPlannerContext,
    op: TokenType,
    modifier: &Option<BinModifier>,
) -> Result<LogicalPlan>
 
fn set_op_on_non_field_columns( &mut self, left: LogicalPlan, right: LogicalPlan, left_context: PromPlannerContext, right_context: PromPlannerContext, op: TokenType, modifier: &Option<BinModifier>, ) -> Result<LogicalPlan>
Build a set operator (AND/OR/UNLESS)
fn or_operator( &mut self, left: LogicalPlan, right: LogicalPlan, left_tag_cols_set: HashSet<String>, right_tag_cols_set: HashSet<String>, left_context: PromPlannerContext, right_context: PromPlannerContext, modifier: &Option<BinModifier>, ) -> Result<LogicalPlan>
Sourcefn projection_for_each_field_column<F>(
    &mut self,
    input: LogicalPlan,
    name_to_expr: F,
) -> Result<LogicalPlan>
 
fn projection_for_each_field_column<F>( &mut self, input: LogicalPlan, name_to_expr: F, ) -> Result<LogicalPlan>
Build a projection that project and perform operation expr for every value columns. Non-value columns (tag and timestamp) will be preserved in the projection.
§Side effect
This function will update the value columns in the context. Those new column names don’t contains qualifier.
Sourcefn filter_on_field_column<F>(
    &self,
    input: LogicalPlan,
    name_to_expr: F,
) -> Result<LogicalPlan>
 
fn filter_on_field_column<F>( &self, input: LogicalPlan, name_to_expr: F, ) -> Result<LogicalPlan>
Build a filter plan that filter on value column. Notice that only one value column is expected.
Sourcefn date_part_on_time_index(&self, date_part: &str) -> Result<DfExpr>
 
fn date_part_on_time_index(&self, date_part: &str) -> Result<DfExpr>
Generate an expr like date_part("hour", <TIME_INDEX>). Caller should ensure the
time index column in context is set
Sourcefn apply_alias_projection(
    &mut self,
    plan: LogicalPlan,
    alias_name: String,
) -> Result<LogicalPlan>
 
fn apply_alias_projection( &mut self, plan: LogicalPlan, alias_name: String, ) -> Result<LogicalPlan>
Apply an alias to the query result by adding a projection with the alias name
Auto Trait Implementations§
impl Freeze for PromPlanner
impl !RefUnwindSafe for PromPlanner
impl Send for PromPlanner
impl Sync for PromPlanner
impl Unpin for PromPlanner
impl !UnwindSafe for PromPlanner
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
 
impl<T> Conv for T
§impl<T, V> Convert<T> for Vwhere
    V: Into<T>,
 
impl<T, V> Convert<T> for Vwhere
    V: Into<T>,
fn convert(value: Self) -> T
fn convert_box(value: Box<Self>) -> Box<T>
fn convert_vec(value: Vec<Self>) -> Vec<T>
fn convert_vec_box(value: Vec<Box<Self>>) -> Vec<Box<T>>
fn convert_matrix(value: Vec<Vec<Self>>) -> Vec<Vec<T>>
fn convert_option(value: Option<Self>) -> Option<T>
fn convert_option_box(value: Option<Box<Self>>) -> Option<Box<T>>
fn convert_option_vec(value: Option<Vec<Self>>) -> Option<Vec<T>>
§impl<T> FmtForward for T
 
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
    Self: Binary,
 
fn fmt_binary(self) -> FmtBinary<Self>where
    Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
    Self: Display,
 
fn fmt_display(self) -> FmtDisplay<Self>where
    Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
    Self: LowerExp,
 
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
    Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
    Self: LowerHex,
 
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
    Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
    Self: Octal,
 
fn fmt_octal(self) -> FmtOctal<Self>where
    Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
    Self: Pointer,
 
fn fmt_pointer(self) -> FmtPointer<Self>where
    Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
    Self: UpperExp,
 
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
    Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
    Self: UpperHex,
 
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
    Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
    &'a Self: for<'a> IntoIterator,
 
fn fmt_list(self) -> FmtList<Self>where
    &'a Self: for<'a> IntoIterator,
§impl<T> FutureExt for T
 
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
 
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
 
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
 
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
 
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
 
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
 
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
 
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
 
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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
 
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
 
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
 
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
    L: Layer<S>,
 
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
    L: Layer<S>,
Layered].§impl<T> Pipe for Twhere
    T: ?Sized,
 
impl<T> Pipe for Twhere
    T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
    Self: Sized,
 
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
    Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    R: 'a,
 
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    R: 'a,
 
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
 
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
    &'a mut self,
    func: impl FnOnce(&'a mut B) -> R,
) -> R
 
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
 
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
 
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
 
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
 
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
    T: ?Sized,
 
impl<T> PolicyExt for Twhere
    T: ?Sized,
§impl<T> ServiceExt for T
 
impl<T> ServiceExt for T
§fn propagate_header(self, header: HeaderName) -> PropagateHeader<Self>where
    Self: Sized,
 
fn propagate_header(self, header: HeaderName) -> PropagateHeader<Self>where
    Self: Sized,
§fn add_extension<T>(self, value: T) -> AddExtension<Self, T>where
    Self: Sized,
 
fn add_extension<T>(self, value: T) -> AddExtension<Self, T>where
    Self: Sized,
§fn map_request_body<F>(self, f: F) -> MapRequestBody<Self, F>where
    Self: Sized,
 
fn map_request_body<F>(self, f: F) -> MapRequestBody<Self, F>where
    Self: Sized,
§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
    Self: Sized,
 
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
    Self: Sized,
§fn compression(self) -> Compression<Self>where
    Self: Sized,
 
fn compression(self) -> Compression<Self>where
    Self: Sized,
§fn decompression(self) -> Decompression<Self>where
    Self: Sized,
 
fn decompression(self) -> Decompression<Self>where
    Self: Sized,
§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
    Self: Sized,
 
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
    Self: Sized,
§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
    Self: Sized,
 
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
    Self: Sized,
§fn follow_redirects(self) -> FollowRedirect<Self>where
    Self: Sized,
 
fn follow_redirects(self) -> FollowRedirect<Self>where
    Self: Sized,
§fn sensitive_headers(
    self,
    headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>where
    Self: Sized,
 
fn sensitive_headers(
    self,
    headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<SetSensitiveResponseHeaders<Self>>where
    Self: Sized,
§fn sensitive_request_headers(
    self,
    headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<Self>where
    Self: Sized,
 
fn sensitive_request_headers(
    self,
    headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveRequestHeaders<Self>where
    Self: Sized,
§fn sensitive_response_headers(
    self,
    headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveResponseHeaders<Self>where
    Self: Sized,
 
fn sensitive_response_headers(
    self,
    headers: impl IntoIterator<Item = HeaderName>,
) -> SetSensitiveResponseHeaders<Self>where
    Self: Sized,
§fn override_request_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetRequestHeader<Self, M>where
    Self: Sized,
 
fn override_request_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetRequestHeader<Self, M>where
    Self: Sized,
§fn append_request_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetRequestHeader<Self, M>where
    Self: Sized,
 
fn append_request_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetRequestHeader<Self, M>where
    Self: Sized,
§fn insert_request_header_if_not_present<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetRequestHeader<Self, M>where
    Self: Sized,
 
fn insert_request_header_if_not_present<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetRequestHeader<Self, M>where
    Self: Sized,
§fn override_response_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetResponseHeader<Self, M>where
    Self: Sized,
 
fn override_response_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetResponseHeader<Self, M>where
    Self: Sized,
§fn append_response_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetResponseHeader<Self, M>where
    Self: Sized,
 
fn append_response_header<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetResponseHeader<Self, M>where
    Self: Sized,
§fn insert_response_header_if_not_present<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetResponseHeader<Self, M>where
    Self: Sized,
 
fn insert_response_header_if_not_present<M>(
    self,
    header_name: HeaderName,
    make: M,
) -> SetResponseHeader<Self, M>where
    Self: Sized,
§fn set_request_id<M>(
    self,
    header_name: HeaderName,
    make_request_id: M,
) -> SetRequestId<Self, M>where
    Self: Sized,
    M: MakeRequestId,
 
fn set_request_id<M>(
    self,
    header_name: HeaderName,
    make_request_id: M,
) -> SetRequestId<Self, M>where
    Self: Sized,
    M: MakeRequestId,
§fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
    Self: Sized,
    M: MakeRequestId,
 
fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
    Self: Sized,
    M: MakeRequestId,
x-request-id as the header name. Read more§fn propagate_request_id(
    self,
    header_name: HeaderName,
) -> PropagateRequestId<Self>where
    Self: Sized,
 
fn propagate_request_id(
    self,
    header_name: HeaderName,
) -> PropagateRequestId<Self>where
    Self: Sized,
§fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
    Self: Sized,
 
fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
    Self: Sized,
x-request-id as the header name. Read more§fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>where
    Self: Sized,
 
fn catch_panic(self) -> CatchPanic<Self, DefaultResponseForPanic>where
    Self: Sized,
500 Internal Server responses. Read more§fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
    Self: Sized,
 
fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
    Self: Sized,
413 Payload Too Large responses. Read more§fn trim_trailing_slash(self) -> NormalizePath<Self>where
    Self: Sized,
 
fn trim_trailing_slash(self) -> NormalizePath<Self>where
    Self: Sized,
§fn append_trailing_slash(self) -> NormalizePath<Self>where
    Self: Sized,
 
fn append_trailing_slash(self) -> NormalizePath<Self>where
    Self: Sized,
§impl<SS, SP> SupersetOf<SS> for SPwhere
    SS: SubsetOf<SP>,
 
impl<SS, SP> SupersetOf<SS> for SPwhere
    SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
 
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
 
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
 
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
 
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.§impl<T> Tap for T
 
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
 
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
 
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
 
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
 
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
 
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
 
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
 
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
 
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
 
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
 
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
 
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
 
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
 
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.