pub struct CompiledSubstitution { /* private fields */ }Expand description
A precompiled path_rewrite.regex.substitution (PERF-04, #206).
The $1 / ${name} substitution syntax is parsed ONCE at snapshot
compile time into a list of segments — literal text or a named/numeric
reference — so the per-request rewrite path never re-parses the
substitution string. Each segment is expanded against the regex
captures (and the route’s {param} template captures) in a single
pass with a pre-sized String.
Implementations§
Source§impl CompiledSubstitution
impl CompiledSubstitution
Sourcepub fn compile(substitution: &str) -> Self
pub fn compile(substitution: &str) -> Self
Parse a $1 / ${name} substitution string into segments.
Mirrors the grammar of expand_substitution in
dataplane/proxy.rs exactly: $ followed by digits, an
identifier, or {...}; a lone $ (end of string or followed
by a non-identifier char) is kept literally.
Sourcepub fn expand(&self, caps: &Captures<'_>, params: &[(String, String)]) -> String
pub fn expand(&self, caps: &Captures<'_>, params: &[(String, String)]) -> String
Expand against regex captures and route {param} captures.
The result String is pre-sized to the compiled literal
capacity, so the common case (a template with mostly literal
text and a few short capture refs) allocates exactly once.
Trait Implementations§
Source§impl Clone for CompiledSubstitution
impl Clone for CompiledSubstitution
Source§fn clone(&self) -> CompiledSubstitution
fn clone(&self) -> CompiledSubstitution
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for CompiledSubstitution
impl RefUnwindSafe for CompiledSubstitution
impl Send for CompiledSubstitution
impl Sync for CompiledSubstitution
impl Unpin for CompiledSubstitution
impl UnwindSafe for CompiledSubstitution
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§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