[][src]Struct iri_string::types::RiRelativeStr

#[repr(transparent)]
pub struct RiRelativeStr<S> { /* fields omitted */ }

A borrowed slice of a relative IRI reference.

This corresponds to irelative-ref rule in RFC 3987 (and relative-ref rule in RFC 3986). The rule for irelative-ref is irelative-part [ "?" iquery ] [ "#" ifragment ].

Valid values

This type can have a relative IRI reference.

assert!(IriRelativeStr::new("foo").is_ok());
assert!(IriRelativeStr::new("foo/bar").is_ok());
assert!(IriRelativeStr::new("/foo").is_ok());
assert!(IriRelativeStr::new("//foo/bar").is_ok());
assert!(IriRelativeStr::new("?foo").is_ok());
assert!(IriRelativeStr::new("#foo").is_ok());
assert!(IriRelativeStr::new("foo/bar?baz#qux").is_ok());
// The first path component can have colon if the path is absolute.
assert!(IriRelativeStr::new("/foo:bar/").is_ok());
// Second or following path components can have colon.
assert!(IriRelativeStr::new("foo/bar://baz/").is_ok());
assert!(IriRelativeStr::new("./foo://bar").is_ok());

Absolute form of a reference is not allowed.

assert!(IriRelativeStr::new("https://example.com/").is_err());
// The first path component cannot have colon, if the path is not absolute.
assert!(IriRelativeStr::new("foo:bar").is_err());
assert!(IriRelativeStr::new("foo:").is_err());
assert!(IriRelativeStr::new("foo:/").is_err());
assert!(IriRelativeStr::new("foo://").is_err());
assert!(IriRelativeStr::new("foo:///").is_err());
assert!(IriRelativeStr::new("foo:////").is_err());
assert!(IriRelativeStr::new("foo://///").is_err());

Some characters and sequences cannot used in an IRI reference.

// `<` and `>` cannot directly appear in a relative IRI reference.
assert!(IriRelativeStr::new("<not allowed>").is_err());
// Broken percent encoding cannot appear in a relative IRI reference.
assert!(IriRelativeStr::new("%").is_err());
assert!(IriRelativeStr::new("%GG").is_err());

Methods

impl<S: Spec> RiRelativeStr<S>[src]

pub fn new(s: &str) -> Result<&Self, Error>[src]

Creates a new string.

pub fn as_str(&self) -> &str[src]

Returns &str.

pub fn len(&self) -> usize[src]

Returns the string length.

pub fn is_empty(&self) -> bool[src]

Returns whether the string is empty.

impl<S: Spec> RiRelativeStr<S>[src]

pub fn fragment(&self) -> Option<&RiFragmentStr<S>>[src]

Returns the fragment part if exists.

A leading # character is truncated if the fragment part exists.

Examples

If the IRI has a fragment part, Some(_) is returned.

let iri = IriRelativeStr::new("?foo#bar")?;
let fragment = IriFragmentStr::new("bar")?;
assert_eq!(iri.fragment(), Some(fragment));
let iri = IriRelativeStr::new("#foo")?;
let fragment = IriFragmentStr::new("foo")?;
assert_eq!(iri.fragment(), Some(fragment));

When the fragment part exists but is empty string, Some(_) is returned.

let iri = IriRelativeStr::new("#")?;
let fragment = IriFragmentStr::new("")?;
assert_eq!(iri.fragment(), Some(fragment));

If the IRI has no fragment, None is returned.

let iri = IriRelativeStr::new("")?;
assert_eq!(iri.fragment(), None);

pub fn resolve_against(&self, base: &RiAbsoluteStr<S>) -> RiString<S>[src]

Returns resolved IRI against the given base IRI, using strict resolver.

About reference resolution output example, see RFC 3986 section 5.4.

About resolver strictness, see RFC 3986 section 5.4.2:

Some parsers allow the scheme name to be present in a relative reference if it is the same as the base URI scheme. This is considered to be a loophole in prior specifications of partial URI RFC1630. Its use should be avoided but is allowed for backward compatibility.

--- https://tools.ietf.org/html/rfc3986#section-5.4.2

Usual users will want to use strict resolver.

Enabled by alloc or std feature.

Trait Implementations

impl<S: Spec> AsRef<RiReferenceStr<S>> for RiRelativeStr<S>[src]

impl AsRef<RiRelativeStr<IriSpec>> for RiRelativeStr<UriSpec>[src]

impl AsRef<RiRelativeStr<IriSpec>> for RiRelativeString<UriSpec>[src]

impl<S: Spec> AsRef<RiRelativeStr<S>> for RiRelativeStr<S>[src]

impl<S: Spec> AsRef<RiRelativeStr<S>> for RiRelativeString<S>[src]

impl<S: Spec> AsRef<str> for RiRelativeStr<S>[src]

impl<S: Spec> Borrow<RiRelativeStr<S>> for RiRelativeString<S>[src]

impl<S: Spec> Debug for RiRelativeStr<S>[src]

impl<'de: 'a, 'a, S: 'de + Spec> Deserialize<'de> for &'a RiRelativeStr<S>[src]

impl<S: Spec> Display for RiRelativeStr<S>[src]

impl<S: Spec> Eq for RiRelativeStr<S>[src]

impl<'_, S: Spec> From<&'_ RiRelativeStr<S>> for Arc<RiRelativeStr<S>>[src]

impl<'_, S: Spec> From<&'_ RiRelativeStr<S>> for Box<RiRelativeStr<S>>[src]

impl<'_, S: Spec> From<&'_ RiRelativeStr<S>> for Rc<RiRelativeStr<S>>[src]

impl<'_, S: Spec> From<&'_ RiRelativeStr<S>> for RiRelativeString<S>[src]

impl<'a, S: Spec> From<&'a RiRelativeStr<S>> for &'a str[src]

impl<'a, S: Spec> From<&'a RiRelativeStr<S>> for &'a RiReferenceStr<S>[src]

impl<S: Spec> Hash for RiRelativeStr<S>[src]

impl<S: Spec> Ord for RiRelativeStr<S>[src]

impl<'_, S: Spec, T: Spec> PartialEq<&'_ RiReferenceStr<T>> for RiRelativeStr<S>[src]

impl<'_, S: Spec> PartialEq<&'_ RiRelativeStr<S>> for str[src]

impl<'_, S: Spec, T: Spec> PartialEq<&'_ RiRelativeStr<S>> for RiRelativeStr<T>[src]

impl<'_, '_, S: Spec> PartialEq<&'_ RiRelativeStr<S>> for Cow<'_, str>[src]

impl<'_, '_, S: Spec, T: Spec> PartialEq<&'_ RiRelativeStr<S>> for Cow<'_, RiRelativeStr<T>>[src]

impl<'_, S: Spec, T: Spec> PartialEq<&'_ RiRelativeStr<S>> for RiRelativeString<T>[src]

impl<'_, S: Spec, T: Spec> PartialEq<&'_ RiRelativeStr<S>> for RiReferenceStr<T>[src]

impl<'_, '_, S: Spec, T: Spec> PartialEq<&'_ RiRelativeStr<S>> for Cow<'_, RiReferenceStr<T>>[src]

impl<'_, S: Spec, T: Spec> PartialEq<&'_ RiRelativeStr<S>> for RiReferenceString<T>[src]

impl<'_, S: Spec> PartialEq<&'_ str> for RiRelativeStr<S>[src]

impl<'_, S: Spec, T: Spec> PartialEq<Cow<'_, RiReferenceStr<T>>> for RiRelativeStr<S>[src]

impl<'_, '_, S: Spec, T: Spec> PartialEq<Cow<'_, RiReferenceStr<T>>> for &'_ RiRelativeStr<S>[src]

impl<'_, '_, S: Spec, T: Spec> PartialEq<Cow<'_, RiRelativeStr<T>>> for &'_ RiRelativeStr<S>[src]

impl<'_, S: Spec> PartialEq<Cow<'_, str>> for RiRelativeStr<S>[src]

impl<'_, '_, S: Spec> PartialEq<Cow<'_, str>> for &'_ RiRelativeStr<S>[src]

impl<S: Spec, T: Spec> PartialEq<RiReferenceStr<T>> for RiRelativeStr<S>[src]

impl<'_, S: Spec, T: Spec> PartialEq<RiReferenceStr<T>> for &'_ RiRelativeStr<S>[src]

impl<S: Spec, T: Spec> PartialEq<RiReferenceString<T>> for RiRelativeStr<S>[src]

impl<'_, S: Spec, T: Spec> PartialEq<RiReferenceString<T>> for &'_ RiRelativeStr<S>[src]

impl<S: Spec> PartialEq<RiRelativeStr<S>> for RiRelativeStr<S>[src]

impl<S: Spec> PartialEq<RiRelativeStr<S>> for str[src]

impl<'_, S: Spec> PartialEq<RiRelativeStr<S>> for &'_ str[src]

impl<'_, S: Spec> PartialEq<RiRelativeStr<S>> for Cow<'_, str>[src]

impl<S: Spec, T: Spec> PartialEq<RiRelativeStr<S>> for RiRelativeString<T>[src]

impl<S: Spec, T: Spec> PartialEq<RiRelativeStr<S>> for RiReferenceStr<T>[src]

impl<'_, S: Spec, T: Spec> PartialEq<RiRelativeStr<S>> for &'_ RiReferenceStr<T>[src]

impl<'_, S: Spec, T: Spec> PartialEq<RiRelativeStr<S>> for Cow<'_, RiReferenceStr<T>>[src]

impl<S: Spec, T: Spec> PartialEq<RiRelativeStr<S>> for RiReferenceString<T>[src]

impl<'_, S: Spec, T: Spec> PartialEq<RiRelativeStr<T>> for &'_ RiRelativeStr<S>[src]

impl<S: Spec, T: Spec> PartialEq<RiRelativeString<T>> for RiRelativeStr<S>[src]

impl<'_, S: Spec, T: Spec> PartialEq<RiRelativeString<T>> for &'_ RiRelativeStr<S>[src]

impl<S: Spec> PartialEq<str> for RiRelativeStr<S>[src]

impl<'_, S: Spec> PartialEq<str> for &'_ RiRelativeStr<S>[src]

impl<'_, S: Spec, T: Spec> PartialOrd<&'_ RiReferenceStr<T>> for RiRelativeStr<S>[src]

impl<'_, S: Spec> PartialOrd<&'_ RiRelativeStr<S>> for str[src]

impl<'_, S: Spec, T: Spec> PartialOrd<&'_ RiRelativeStr<S>> for RiRelativeStr<T>[src]

impl<'_, '_, S: Spec> PartialOrd<&'_ RiRelativeStr<S>> for Cow<'_, str>[src]

impl<'_, '_, S: Spec, T: Spec> PartialOrd<&'_ RiRelativeStr<S>> for Cow<'_, RiRelativeStr<T>>[src]

impl<'_, S: Spec, T: Spec> PartialOrd<&'_ RiRelativeStr<S>> for RiRelativeString<T>[src]

impl<'_, S: Spec, T: Spec> PartialOrd<&'_ RiRelativeStr<S>> for RiReferenceStr<T>[src]

impl<'_, '_, S: Spec, T: Spec> PartialOrd<&'_ RiRelativeStr<S>> for Cow<'_, RiReferenceStr<T>>[src]

impl<'_, S: Spec, T: Spec> PartialOrd<&'_ RiRelativeStr<S>> for RiReferenceString<T>[src]

impl<'_, S: Spec> PartialOrd<&'_ str> for RiRelativeStr<S>[src]

impl<'_, S: Spec, T: Spec> PartialOrd<Cow<'_, RiReferenceStr<T>>> for RiRelativeStr<S>[src]

impl<'_, '_, S: Spec, T: Spec> PartialOrd<Cow<'_, RiReferenceStr<T>>> for &'_ RiRelativeStr<S>[src]

impl<'_, '_, S: Spec, T: Spec> PartialOrd<Cow<'_, RiRelativeStr<T>>> for &'_ RiRelativeStr<S>[src]

impl<'_, S: Spec> PartialOrd<Cow<'_, str>> for RiRelativeStr<S>[src]

impl<'_, '_, S: Spec> PartialOrd<Cow<'_, str>> for &'_ RiRelativeStr<S>[src]

impl<S: Spec, T: Spec> PartialOrd<RiReferenceStr<T>> for RiRelativeStr<S>[src]

impl<'_, S: Spec, T: Spec> PartialOrd<RiReferenceStr<T>> for &'_ RiRelativeStr<S>[src]

impl<S: Spec, T: Spec> PartialOrd<RiReferenceString<T>> for RiRelativeStr<S>[src]

impl<'_, S: Spec, T: Spec> PartialOrd<RiReferenceString<T>> for &'_ RiRelativeStr<S>[src]

impl<S: Spec> PartialOrd<RiRelativeStr<S>> for RiRelativeStr<S>[src]

impl<S: Spec> PartialOrd<RiRelativeStr<S>> for str[src]

impl<'_, S: Spec> PartialOrd<RiRelativeStr<S>> for &'_ str[src]

impl<'_, S: Spec> PartialOrd<RiRelativeStr<S>> for Cow<'_, str>[src]

impl<S: Spec, T: Spec> PartialOrd<RiRelativeStr<S>> for RiRelativeString<T>[src]

impl<S: Spec, T: Spec> PartialOrd<RiRelativeStr<S>> for RiReferenceStr<T>[src]

impl<'_, S: Spec, T: Spec> PartialOrd<RiRelativeStr<S>> for &'_ RiReferenceStr<T>[src]

impl<'_, S: Spec, T: Spec> PartialOrd<RiRelativeStr<S>> for Cow<'_, RiReferenceStr<T>>[src]

impl<S: Spec, T: Spec> PartialOrd<RiRelativeStr<S>> for RiReferenceString<T>[src]

impl<'_, S: Spec, T: Spec> PartialOrd<RiRelativeStr<T>> for &'_ RiRelativeStr<S>[src]

impl<S: Spec, T: Spec> PartialOrd<RiRelativeString<T>> for RiRelativeStr<S>[src]

impl<'_, S: Spec, T: Spec> PartialOrd<RiRelativeString<T>> for &'_ RiRelativeStr<S>[src]

impl<S: Spec> PartialOrd<str> for RiRelativeStr<S>[src]

impl<'_, S: Spec> PartialOrd<str> for &'_ RiRelativeStr<S>[src]

impl<S> Serialize for RiRelativeStr<S>[src]

impl<S: Spec> ToOwned for RiRelativeStr<S>[src]

type Owned = RiRelativeString<S>

The resulting type after obtaining ownership.

impl<'a, S: Spec> TryFrom<&'a RiReferenceStr<S>> for &'a RiRelativeStr<S>[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'a, S: Spec> TryFrom<&'a str> for &'a RiRelativeStr<S>[src]

type Error = Error

The type returned in the event of a conversion error.

Auto Trait Implementations

impl<S> RefUnwindSafe for RiRelativeStr<S>

impl<S> Send for RiRelativeStr<S>

impl<S> Sync for RiRelativeStr<S>

impl<S> Unpin for RiRelativeStr<S>

impl<S> UnwindSafe for RiRelativeStr<S>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.