pub struct Route {
pub path: String,
pub name: Option<String>,
pub namespace: Option<String>,
pub middleware: Vec<Arc<dyn Middleware>>,
/* private fields */
}Expand description
Route definition Uses composition to combine path patterns with handlers Similar to Django’s URLPattern
Fields§
§path: StringURL path pattern (e.g., "/users/{id}/")
name: Option<String>Optional route name for reverse URL lookup.
namespace: Option<String>Namespace for this route (e.g., “users”, “api”) When combined with name, forms “namespace:name”
middleware: Vec<Arc<dyn Middleware>>Middleware stack for this route Applied in addition to router-level middleware
Implementations§
Source§impl Route
impl Route
Sourcepub fn new(path: impl Into<String>, handler: Arc<dyn Handler>) -> Route
Available on crate feature test only.
pub fn new(path: impl Into<String>, handler: Arc<dyn Handler>) -> Route
test only.Create a new route
§Examples
use reinhardt_urls::routers::Route;
use reinhardt_http::Handler;
use std::sync::Arc;
// Create a simple route (using a dummy handler for demonstration)
let handler = Arc::new(DummyHandler);
let route = Route::new("/users/", handler);
assert_eq!(route.path, "/users/");Sourcepub fn from_handler<H>(path: impl Into<String>, handler: H) -> Routewhere
H: Handler + 'static,
Available on crate feature test only.
pub fn from_handler<H>(path: impl Into<String>, handler: H) -> Routewhere
H: Handler + 'static,
test only.Create a new route from a concrete handler (preferred method)
This method allows you to pass a handler directly without wrapping it in Arc.
The Arc wrapping is handled internally for you.
§Examples
use reinhardt_urls::routers::Route;
use reinhardt_http::Handler;
// No Arc::new() needed!
let route = Route::from_handler("/users/", DummyHandler);
assert_eq!(route.path, "/users/");Sourcepub fn with_name(self, name: impl Into<String>) -> Route
Available on crate feature test only.
pub fn with_name(self, name: impl Into<String>) -> Route
test only.Set the name of the route
§Examples
use reinhardt_urls::routers::Route;
use reinhardt_http::Handler;
use std::sync::Arc;
let handler = Arc::new(DummyHandler);
let route = Route::new("/users/", handler)
.with_name("user-list");
assert_eq!(route.name, Some("user-list".to_string()));Sourcepub fn with_namespace(self, namespace: impl Into<String>) -> Route
Available on crate feature test only.
pub fn with_namespace(self, namespace: impl Into<String>) -> Route
test only.Set the namespace of the route
§Examples
use reinhardt_urls::routers::Route;
use reinhardt_http::Handler;
use std::sync::Arc;
let handler = Arc::new(DummyHandler);
let route = Route::new("/users/", handler)
.with_namespace("api");
assert_eq!(route.namespace, Some("api".to_string()));Sourcepub fn with_middleware(self, middleware: Arc<dyn Middleware>) -> Route
Available on crate feature test only.
pub fn with_middleware(self, middleware: Arc<dyn Middleware>) -> Route
test only.Add middleware to this route
§Examples
use reinhardt_urls::routers::Route;
use reinhardt_http::Handler;
use reinhardt_middleware::LoggingMiddleware;
use std::sync::Arc;
let handler = Arc::new(DummyHandler);
let route = Route::new("/users/", handler)
.with_middleware(Arc::new(LoggingMiddleware::new()));
assert_eq!(route.middleware.len(), 1);Sourcepub fn full_name(&self) -> Option<String>
Available on crate feature test only.
pub fn full_name(&self) -> Option<String>
test only.Get the full name including namespace (e.g., “users:list”) Similar to Django’s view_name in ResolverMatch
§Examples
use reinhardt_urls::routers::Route;
use reinhardt_http::Handler;
use std::sync::Arc;
let handler = Arc::new(DummyHandler);
// With namespace and name
let route = Route::new("/users/", handler.clone())
.with_namespace("api")
.with_name("list");
assert_eq!(route.full_name(), Some("api:list".to_string()));
// With only name
let route = Route::new("/users/", handler.clone())
.with_name("list");
assert_eq!(route.full_name(), Some("list".to_string()));
// Without name
let route = Route::new("/users/", handler);
assert_eq!(route.full_name(), None);Sourcepub fn matches_namespace_pattern(&self, pattern: &str) -> bool
Available on crate feature test only.
pub fn matches_namespace_pattern(&self, pattern: &str) -> bool
test only.Check if this route matches a namespace pattern Used for namespace-based versioning
§Examples
use reinhardt_urls::routers::Route;
use reinhardt_http::Handler;
use std::sync::Arc;
let handler = Arc::new(DummyHandler);
let route = Route::new("/v1/users/", handler)
.with_namespace("v1");
assert!(route.matches_namespace_pattern("/v{version}/"));
assert!(!route.matches_namespace_pattern("/api/{version}/"));Sourcepub fn extract_version_from_pattern(&self, pattern: &str) -> Option<&str>
Available on crate feature test only.
pub fn extract_version_from_pattern(&self, pattern: &str) -> Option<&str>
test only.Extract version from namespace pattern Returns the version string if the route matches the pattern
§Examples
use reinhardt_urls::routers::Route;
use reinhardt_http::Handler;
use std::sync::Arc;
let handler = Arc::new(DummyHandler);
let route = Route::new("/v1/users/", handler)
.with_namespace("v1");
assert_eq!(route.extract_version_from_pattern("/v{version}/"), Some("1"));
assert_eq!(route.extract_version_from_pattern("/api/{version}/"), None);Sourcepub fn handler(&self) -> &dyn Handler
Available on crate feature test only.
pub fn handler(&self) -> &dyn Handler
test only.Get a reference to the route’s handler
This method provides access to the handler without exposing the Arc wrapper.
§Examples
use reinhardt_urls::routers::Route;
use reinhardt_http::Handler;
let route = Route::from_handler("/users/", DummyHandler);
let handler = route.handler();
// Use handler as &dyn HandlerSourcepub fn handler_arc(&self) -> Arc<dyn Handler>
Available on crate feature test only.
pub fn handler_arc(&self) -> Arc<dyn Handler>
test only.Get a cloned Arc of the handler (for cases where you need ownership)
In most cases, you should use handler() instead to get a reference.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Route
impl !RefUnwindSafe for Route
impl Send for Route
impl Sync for Route
impl Unpin for Route
impl UnsafeUnpin for Route
impl !UnwindSafe for Route
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
type Err = Infallible
fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§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 moreSource§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 moreSource§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
Source§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
Source§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.Source§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.Source§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.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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 moreSource§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.Source§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.Source§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.Source§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.Source§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.Source§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.Source§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.