pub struct RouteUri<'a> { /* private fields */ }
Expand description
A route URI which is matched against requests.
A route URI is composed of two components:
-
base
Otherwise known as the route’s “mount point”, the
base
is a staticOrigin
that prefixes the route URI. All route URIs have abase
. When routes are created manually withRoute::new()
, the base defaults to/
. When mounted viaRocket::mount()
, the base is explicitly specified as the first argument.use rocket::Route; use rocket::http::Method; let route = Route::new(Method::Get, "/foo/<bar>", handler); assert_eq!(route.uri.base(), "/"); let rocket = rocket::build().mount("/base", vec![route]); let routes: Vec<_> = rocket.routes().collect(); assert_eq!(routes[0].uri.base(), "/base");
-
origin
Otherwise known as the “route URI”, the
origin
is anOrigin
with potentially dynamic (<dyn>
or<dyn..>
) segments. It is prefixed with thebase
. This is the URI which is matched against incoming requests for routing.use rocket::Route; use rocket::http::Method; let route = Route::new(Method::Get, "/foo/<bar>", handler); assert_eq!(route.uri, "/foo/<bar>"); let rocket = rocket::build().mount("/base", vec![route]); let routes: Vec<_> = rocket.routes().collect(); assert_eq!(routes[0].uri, "/base/foo/<bar>");
Implementations§
source§impl<'a> RouteUri<'a>
impl<'a> RouteUri<'a>
sourcepub fn inner(&self) -> &Origin<'a>
pub fn inner(&self) -> &Origin<'a>
Returns the complete route URI.
Note: RouteURI
derefs to the Origin
returned by this method, so
this method should rarely be called directly.
Example
use rocket::Route;
use rocket::http::Method;
let route = Route::new(Method::Get, "/foo/bar?a=1", handler);
// Use `inner()` directly:
assert_eq!(route.uri.inner().query().unwrap(), "a=1");
// Use the deref implementation. This is preferred:
assert_eq!(route.uri.query().unwrap(), "a=1");
sourcepub fn base(&self) -> Path<'_>
pub fn base(&self) -> Path<'_>
The base mount point of this route URI.
Example
use rocket::Route;
use rocket::http::Method;
let route = Route::new(Method::Get, "/foo/bar?a=1", handler);
assert_eq!(route.uri.base(), "/");
let route = route.rebase(uri!("/boo"));
assert_eq!(route.uri.base(), "/boo");
let route = route.rebase(uri!("/foo"));
assert_eq!(route.uri.base(), "/foo/boo");
sourcepub fn unmounted(&self) -> &Origin<'a>
pub fn unmounted(&self) -> &Origin<'a>
The route URI without the base mount point.
Example
use rocket::Route;
use rocket::http::Method;
let route = Route::new(Method::Get, "/foo/bar?a=1", handler);
let route = route.rebase(uri!("/boo"));
assert_eq!(route.uri, "/boo/foo/bar?a=1");
assert_eq!(route.uri.base(), "/boo");
assert_eq!(route.uri.unmounted(), "/foo/bar?a=1");
Methods from Deref<Target = Origin<'a>>§
sourcepub fn path(&self) -> Path<'_>
pub fn path(&self) -> Path<'_>
Returns the path part of this URI.
Example
let uri = uri!("/a/b/c");
assert_eq!(uri.path(), "/a/b/c");
let uri = uri!("/a/b/c?name=bob");
assert_eq!(uri.path(), "/a/b/c");
sourcepub fn query(&self) -> Option<Query<'_>>
pub fn query(&self) -> Option<Query<'_>>
Returns the query part of this URI without the question mark, if there is any.
Example
let uri = uri!("/a/b/c?alphabet=true");
assert_eq!(uri.query().unwrap(), "alphabet=true");
let uri = uri!("/a/b/c");
assert!(uri.query().is_none());
sourcepub fn map_path<'s, F, P>(&'s self, f: F) -> Option<Origin<'a>>where
F: FnOnce(&'s RawStr) -> P,
P: Into<RawStrBuf> + 's,
pub fn map_path<'s, F, P>(&'s self, f: F) -> Option<Origin<'a>>where F: FnOnce(&'s RawStr) -> P, P: Into<RawStrBuf> + 's,
Applies the function f
to the internal path
and returns a new
Origin
with the new path. If the path returned from f
is invalid,
returns None
. Otherwise, returns Some
, even if the new path is
abnormal.
Examples
Affix a trailing slash if one isn’t present.
let uri = uri!("/a/b/c");
let expected_uri = uri!("/a/b/c/d");
assert_eq!(uri.map_path(|p| format!("{}/d", p)), Some(expected_uri));
let uri = uri!("/a/b/c");
let abnormal_map = uri.map_path(|p| format!("{}///d", p));
assert_eq!(abnormal_map.unwrap(), "/a/b/c///d");
let uri = uri!("/a/b/c");
let expected = uri!("/b/c");
let mapped = uri.map_path(|p| p.strip_prefix("/a").unwrap_or(p));
assert_eq!(mapped, Some(expected));
let uri = uri!("/a");
assert_eq!(uri.map_path(|p| p.strip_prefix("/a").unwrap_or(p)), None);
let uri = uri!("/a/b/c");
assert_eq!(uri.map_path(|p| format!("hi/{}", p)), None);
sourcepub fn is_normalized(&self) -> bool
pub fn is_normalized(&self) -> bool
Returns true
if self
is normalized. Otherwise, returns false
.
See Normalization for more information on what it
means for an origin URI to be normalized. Note that uri!()
always
normalizes static input.
Example
use rocket::http::uri::Origin;
assert!(Origin::parse("/").unwrap().is_normalized());
assert!(Origin::parse("/a/b/c").unwrap().is_normalized());
assert!(Origin::parse("/a/b/c?a=b&c").unwrap().is_normalized());
assert!(!Origin::parse("/a/b/c//d").unwrap().is_normalized());
assert!(!Origin::parse("/a?q&&b").unwrap().is_normalized());
assert!(uri!("/a/b/c//d").is_normalized());
assert!(uri!("/a?q&&b").is_normalized());
sourcepub fn has_trailing_slash(&self) -> bool
pub fn has_trailing_slash(&self) -> bool
Returns true
if self
has a trailing slash.
This is defined as path.len() > 1
&& path.ends_with('/')
. This
implies that the URI /
is not considered to have a trailing slash.
Example
assert!(!uri!("/").has_trailing_slash());
assert!(!uri!("/a").has_trailing_slash());
assert!(!uri!("/foo/bar/baz").has_trailing_slash());
assert!(uri!("/a/").has_trailing_slash());
assert!(uri!("/foo/").has_trailing_slash());
assert!(uri!("/foo/bar/baz/").has_trailing_slash());
sourcepub fn is_normalized_nontrailing(&self) -> bool
pub fn is_normalized_nontrailing(&self) -> bool
Returns true
if self
is normalized (Origin::is_normalized()
) and
does not have a trailing slash (Origin::has_trailing_slash()).
Otherwise returns false
.
Example
use rocket::http::uri::Origin;
let origin = Origin::parse("/").unwrap();
assert!(origin.is_normalized_nontrailing());
let origin = Origin::parse("/foo/bar").unwrap();
assert!(origin.is_normalized_nontrailing());
let origin = Origin::parse("//").unwrap();
assert!(!origin.is_normalized_nontrailing());
let origin = Origin::parse("/foo/bar//baz/").unwrap();
assert!(!origin.is_normalized_nontrailing());
let origin = Origin::parse("/foo/bar/").unwrap();
assert!(!origin.is_normalized_nontrailing());
Trait Implementations§
source§impl PartialEq<&str> for RouteUri<'_>
impl PartialEq<&str> for RouteUri<'_>
source§impl<'a, 'b> PartialEq<Origin<'b>> for RouteUri<'a>
impl<'a, 'b> PartialEq<Origin<'b>> for RouteUri<'a>
Auto Trait Implementations§
impl<'a> !RefUnwindSafe for RouteUri<'a>
impl<'a> Send for RouteUri<'a>
impl<'a> Sync for RouteUri<'a>
impl<'a> Unpin for RouteUri<'a>
impl<'a> UnwindSafe for RouteUri<'a>
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
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> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere T: ?Sized,
source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the foreground set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red()
and
green()
, which have the same functionality but are
pithier.
Example
Set foreground color to white using fg()
:
use yansi::{Paint, Color};
painted.fg(Color::White);
Set foreground color to white using white()
.
use yansi::Paint;
painted.white();
source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightYellow
.
Example
println!("{}", value.bright_yellow());
source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Returns self
with the
fg()
set to
Color::BrightMagenta
.
Example
println!("{}", value.bright_magenta());
source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the background set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red()
and
on_green()
, which have the same functionality but
are pithier.
Example
Set background color to red using fg()
:
use yansi::{Paint, Color};
painted.bg(Color::Red);
Set background color to red using on_red()
.
use yansi::Paint;
painted.on_red();
source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightBlack
.
Example
println!("{}", value.on_bright_black());
source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightGreen
.
Example
println!("{}", value.on_bright_green());
source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightYellow
.
Example
println!("{}", value.on_bright_yellow());
source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightBlue
.
Example
println!("{}", value.on_bright_blue());
source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightMagenta
.
Example
println!("{}", value.on_bright_magenta());
source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightCyan
.
Example
println!("{}", value.on_bright_cyan());
source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Returns self
with the
bg()
set to
Color::BrightWhite
.
Example
println!("{}", value.on_bright_white());
source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute
value
.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold()
and
underline()
, which have the same functionality
but are pithier.
Example
Make text bold using attr()
:
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);
Make text bold using using bold()
.
use yansi::Paint;
painted.bold();
source§fn underline(&self) -> Painted<&T>
fn underline(&self) -> Painted<&T>
Returns self
with the
attr()
set to
Attribute::Underline
.
Example
println!("{}", value.underline());
source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Returns self
with the
attr()
set to
Attribute::RapidBlink
.
Example
println!("{}", value.rapid_blink());
source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi
Quirk
value
.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask()
and
wrap()
, which have the same functionality but are
pithier.
Example
Enable wrapping using .quirk()
:
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);
Enable wrapping using wrap()
.
use yansi::Paint;
painted.wrap();
source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition
value
applies. Replaces any previous condition.
See the crate level docs for more details.
Example
Enable styling painted
only when both stdout
and stderr
are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);