Enum Position

pub enum Position

Indicates a position within a URL based on its components.

A range of positions can be used for slicing Url:

# use url::{Url, Position};
# fn something(some_url: Url) {
let serialization: &str = &some_url[..];
let serialization_without_fragment: &str = &some_url[..Position::AfterQuery];
let authority: &str = &some_url[Position::BeforeUsername..Position::AfterPort];
let data_url_payload: &str = &some_url[Position::BeforePath..Position::AfterQuery];
let scheme_relative: &str = &some_url[Position::BeforeUsername..];
# }

In a pseudo-grammar (where []? makes a sub-sequence optional), URL components and delimiters that separate them are:

url =
    scheme ":"
    [ "//" [ username [ ":" password ]? "@" ]? host [ ":" port ]? ]?
    path [ "?" query ]? [ "#" fragment ]?

When a given component is not present, its "before" and "after" position are the same (so that &some_url[BeforeFoo..AfterFoo] is the empty string) and component ordering is preserved (so that a missing query "is between" a path and a fragment).

The end of a component and the start of the next are either the same or separate by a delimiter. (Note that the initial / of a path is considered part of the path here, not a delimiter.) For example, &url[..BeforeFragment] would include a # delimiter (if present in url), so &url[..AfterQuery] might be desired instead.

BeforeScheme and AfterFragment are always the start and end of the entire URL, so &url[BeforeScheme..X] is the same as &url[..X] and &url[X..AfterFragment] is the same as &url[X..].

Variants

BeforeScheme
AfterScheme
BeforeUsername
AfterUsername
BeforePassword
AfterPassword
BeforeHost
AfterHost
BeforePort
AfterPort
BeforePath
AfterPath
BeforeQuery
AfterQuery
BeforeFragment
AfterFragment

Trait Implementations

impl Clone for Position

fn clone(&self) -> Position

impl Copy for Position

impl Debug for Position

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Auto Trait Implementations

impl Freeze for Position

impl RefUnwindSafe for Position

impl Send for Position

impl Sync for Position

impl Unpin for Position

impl UnsafeUnpin for Position

impl UnwindSafe for Position

Blanket Implementations

impl<T> Any for Position where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for Position where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for Position where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

impl<T> CloneToUninit for Position where T: Clone,

unsafe fn clone_to_uninit(&self, dest: *mut u8)

impl<T> From<T> for Position

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToOwned for Position where T: Clone,

type Owned = T;
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)

impl<T, U> Into<U> for Position where U: From<T>,

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom<U> for Position where U: Into<T>,

type Error = never;
fn try_from(value: U) -> Result<T, never>

impl<T, U> TryInto<U> for Position where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error;
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>