pub struct Origin<'a> { /* fields omitted */ }
A URI with an absolute path and optional query: /path?query
.
Origin URIs are the primary type of URI encountered in Rocket applications.
They are also the simplest type of URIs, made up of only a path and an
optional query.
The following diagram illustrates the syntactic structure of an origin URI:
/first_segment/second_segment/third?optional=query
|---------------------------------| |------------|
path query
The URI must begin with a /
, can be followed by any number of segments,
and an optional ?
query separator and query string.
Rocket prefers, and will sometimes require, origin URIs to be normalized.
A normalized origin URI is a valid origin URI that contains zero empty
segments except when there are no segments.
As an example, the following URIs are all valid, normalized URIs:
"/",
"/a/b/c",
"/a/b/c?q",
"/some%20thing"
By contrast, the following are valid but abnormal URIs:
"//",
"/a/b/",
"/a/ab//c//d"
The Origin::to_normalized()
method can be
used to normalize any Origin
:
"//", "/a/b/", "/a/ab//c//d"
"/", "/a/b", "/a/ab/c/d"
Parses the string string
into an Origin
. Parsing will never
allocate. Returns an Error
if string
is not a valid origin URI.
use rocket::http::uri::Origin;
let uri = Origin::parse("/a/b/c?query").expect("valid URI");
assert_eq!(uri.path(), "/a/b/c");
assert_eq!(uri.query(), Some("query"));
Origin::parse("foo bar").expect_err("invalid URI");
Parses the string string
into an Origin
. Parsing will never
allocate. This method should be used instead of
Origin::parse()
when the source URI is already
a String
. Returns an Error
if string
is not a valid origin URI.
use rocket::http::uri::Origin;
let source = format!("/foo/{}/three", 2);
let uri = Origin::parse_owned(source).expect("valid URI");
assert_eq!(uri.path(), "/foo/2/three");
assert_eq!(uri.query(), None);
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.
use rocket::http::uri::Origin;
let normal = Origin::parse("/").unwrap();
assert!(normal.is_normalized());
let normal = Origin::parse("/a/b/c").unwrap();
assert!(normal.is_normalized());
let abnormal = Origin::parse("/a/b/c//d").unwrap();
assert!(!abnormal.is_normalized());
Normalizes self
.
See Normalization for more information on what it
means for an origin URI to be normalized.
use rocket::http::uri::Origin;
let abnormal = Origin::parse("/a/b/c//d").unwrap();
assert!(!abnormal.is_normalized());
let normalized = abnormal.to_normalized();
assert!(normalized.is_normalized());
assert_eq!(normalized, Origin::parse("/a/b/c/d").unwrap());
Returns the path part of this URI.
A URI with only a path:
use rocket::http::uri::Origin;
let uri = Origin::parse("/a/b/c").unwrap();
assert_eq!(uri.path(), "/a/b/c");
A URI with a query:
use rocket::http::uri::Origin;
let uri = Origin::parse("/a/b/c?name=bob").unwrap();
assert_eq!(uri.path(), "/a/b/c");
Returns the query part of this URI without the question mark, if there is
any.
A URI with a query part:
use rocket::http::uri::Origin;
let uri = Origin::parse("/a/b/c?alphabet=true").unwrap();
assert_eq!(uri.query(), Some("alphabet=true"));
A URI without the query part:
use rocket::http::uri::Origin;
let uri = Origin::parse("/a/b/c").unwrap();
assert_eq!(uri.query(), None);
Removes the query part of this URI, if there is any.
use rocket::http::uri::Origin;
let mut uri = Origin::parse("/a/b/c?query=some").unwrap();
assert_eq!(uri.query(), Some("query=some"));
uri.clear_query();
assert_eq!(uri.query(), None);
Returns an iterator over the segments of the path in this URI. Skips
empty segments.
A valid URI with only non-empty segments:
use rocket::http::uri::Origin;
let uri = Origin::parse("/a/b/c?a=true").unwrap();
for (i, segment) in uri.segments().enumerate() {
match i {
0 => assert_eq!(segment, "a"),
1 => assert_eq!(segment, "b"),
2 => assert_eq!(segment, "c"),
_ => unreachable!("only three segments")
}
}
A URI with empty segments:
use rocket::http::uri::Origin;
let uri = Origin::parse("///a//b///c////d?query¶m").unwrap();
for (i, segment) in uri.segments().enumerate() {
match i {
0 => assert_eq!(segment, "a"),
1 => assert_eq!(segment, "b"),
2 => assert_eq!(segment, "c"),
3 => assert_eq!(segment, "d"),
_ => unreachable!("only four segments")
}
}
Returns the number of segments in the URI. Empty segments, which are
invalid according to RFC#3986, are not counted.
The segment count is cached after the first invocation. As a result,
this function is O(1) after the first invocation, and O(n) before.
A valid URI with only non-empty segments:
use rocket::http::uri::Origin;
let uri = Origin::parse("/a/b/c").unwrap();
assert_eq!(uri.segment_count(), 3);
A URI with empty segments:
use rocket::http::uri::Origin;
let uri = Origin::parse("/a/b//c/d///e").unwrap();
assert_eq!(uri.segment_count(), 5);
type Owned = Origin<'static>
The owned version of the type.
Converts self
into an owned version of itself.
This method tests for self
and other
values to be equal, and is used by ==
. Read more
This method tests for !=
.
Performs copy-assignment from source
. Read more
Formats the value using the given formatter. Read more
Formats the value using the given formatter. Read more
Converts self
into a collection.
type Owned = T
Creates owned data from borrowed data, usually by cloning. Read more
🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
Converts the given value to a String
. Read more
type Error = !
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more
type Error = <U as TryFrom<T>>::Error
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
🔬 This is a nightly-only experimental API. (get_type_id
)
this method will likely be replaced by an associated static
Get the TypeId
of this object.