[][src]Struct iri_string::types::RiStr

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

A borrowed string of an absolute IRI possibly with fragment part.

This corresponds to IRI rule in RFC 3987 (and URI rule in RFC 3986). The rule for IRI is scheme ":" ihier-part [ "?" iquery ] [ "#" ifragment ]. In other words, this is RiAbsoluteStr with fragment part allowed.

Valid values

This type can have an IRI (which is absolute, and may have fragment part).

assert!(IriStr::new("https://user:pass@example.com:8080").is_ok());
assert!(IriStr::new("https://example.com/").is_ok());
assert!(IriStr::new("https://example.com/foo?bar=baz").is_ok());
assert!(IriStr::new("https://example.com/foo?bar=baz#qux").is_ok());
assert!(IriStr::new("foo:bar").is_ok());
assert!(IriStr::new("foo:").is_ok());
// `foo://.../` below are all allowed. See the crate documentation for detail.
assert!(IriStr::new("foo:/").is_ok());
assert!(IriStr::new("foo://").is_ok());
assert!(IriStr::new("foo:///").is_ok());
assert!(IriStr::new("foo:////").is_ok());
assert!(IriStr::new("foo://///").is_ok());

Relative IRI reference is not allowed.

// This is relative path.
assert!(IriStr::new("foo/bar").is_err());
// `/foo/bar` is an absolute path, but it is authority-relative.
assert!(IriStr::new("/foo/bar").is_err());
// `//foo/bar` is termed "network-path reference",
// or usually called "protocol-relative reference".
assert!(IriStr::new("//foo/bar").is_err());
// Same-document reference is relative.
assert!(IriStr::new("#foo").is_err());
// Empty string is not a valid absolute IRI.
assert!(IriStr::new("").is_err());

Some characters and sequences cannot used in an IRI.

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

Methods

impl<S: Spec> RiStr<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> RiStr<S>[src]

pub fn to_absolute_and_fragment(
    &self
) -> (&RiAbsoluteStr<S>, Option<&RiFragmentStr<S>>)
[src]

Splits the IRI into an absolute IRI part and a fragment part.

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

Examples

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

let iri = IriStr::new("foo://bar/baz?qux=quux#corge")?;
let (absolute, fragment) = iri.to_absolute_and_fragment();
let fragment_expected = IriFragmentStr::new("corge")?;
assert_eq!(absolute, "foo://bar/baz?qux=quux");
assert_eq!(fragment, Some(fragment_expected));

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

let iri = IriStr::new("foo://bar/baz?qux=quux#")?;
let (absolute, fragment) = iri.to_absolute_and_fragment();
let fragment_expected = IriFragmentStr::new("")?;
assert_eq!(absolute, "foo://bar/baz?qux=quux");
assert_eq!(fragment, Some(fragment_expected));

If the IRI has no fragment, None is returned.

let iri = IriStr::new("foo://bar/baz?qux=quux")?;
let (absolute, fragment) = iri.to_absolute_and_fragment();
assert_eq!(absolute, "foo://bar/baz?qux=quux");
assert_eq!(fragment, None);

pub fn to_absolute(&self) -> &RiAbsoluteStr<S>[src]

Strips the fragment part if exists, and returns &RiAbsoluteStr.

Examples

let iri = IriStr::new("foo://bar/baz?qux=quux#corge")?;
assert_eq!(iri.to_absolute(), "foo://bar/baz?qux=quux");
let iri = IriStr::new("foo://bar/baz?qux=quux")?;
assert_eq!(iri.to_absolute(), "foo://bar/baz?qux=quux");

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

let iri = IriStr::new("foo://bar/baz?qux=quux#corge")?;
let fragment = IriFragmentStr::new("corge")?;
assert_eq!(iri.fragment(), Some(fragment));
let iri = IriStr::new("foo://bar/baz?qux=quux#")?;
let fragment = IriFragmentStr::new("")?;
assert_eq!(iri.fragment(), Some(fragment));
let iri = IriStr::new("foo://bar/baz?qux=quux")?;
assert_eq!(iri.fragment(), None);

Trait Implementations

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

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

impl AsRef<RiStr<IriSpec>> for RiString<UriSpec>[src]

impl<S: Spec> AsRef<RiStr<S>> for RiAbsoluteStr<S>[src]

impl<S: Spec> AsRef<RiStr<S>> for RiAbsoluteString<S>[src]

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

impl<S: Spec> AsRef<RiStr<S>> for RiString<S>[src]

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

impl<S: Spec> Borrow<RiStr<S>> for RiString<S>[src]

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

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

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

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

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

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

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

impl<'_, S: Spec> From<&'_ RiStr<S>> for RiString<S>[src]

impl<'a, S: Spec> From<&'a RiAbsoluteStr<S>> for &'a RiStr<S>[src]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

impl<S: Spec, T: Spec> PartialEq<RiAbsoluteStr<S>> for RiStr<T>[src]

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

impl<S: Spec, T: Spec> PartialEq<RiAbsoluteString<S>> for RiStr<T>[src]

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

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

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

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

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

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

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

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

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

impl<S: Spec, T: Spec> PartialEq<RiStr<S>> for RiString<T>[src]

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

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

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

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

impl<S: Spec, T: Spec> PartialEq<RiStr<T>> for RiAbsoluteStr<S>[src]

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

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

impl<S: Spec, T: Spec> PartialEq<RiStr<T>> for RiAbsoluteString<S>[src]

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

impl<S: Spec, T: Spec> PartialEq<RiString<T>> for RiStr<S>[src]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

impl<S: Spec, T: Spec> PartialOrd<RiAbsoluteStr<S>> for RiStr<T>[src]

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

impl<S: Spec, T: Spec> PartialOrd<RiAbsoluteString<S>> for RiStr<T>[src]

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

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

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

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

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

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

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

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

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

impl<S: Spec, T: Spec> PartialOrd<RiStr<S>> for RiString<T>[src]

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

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

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

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

impl<S: Spec, T: Spec> PartialOrd<RiStr<T>> for RiAbsoluteStr<S>[src]

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

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

impl<S: Spec, T: Spec> PartialOrd<RiStr<T>> for RiAbsoluteString<S>[src]

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

impl<S: Spec, T: Spec> PartialOrd<RiString<T>> for RiStr<S>[src]

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

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

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

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

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

type Owned = RiString<S>

The resulting type after obtaining ownership.

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

type Error = Error

The type returned in the event of a conversion error.

impl<'a, S: Spec> TryFrom<&'a RiStr<S>> for &'a RiAbsoluteStr<S>[src]

type Error = Error

The type returned in the event of a conversion error.

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

type Error = Error

The type returned in the event of a conversion error.

Auto Trait Implementations

impl<S> RefUnwindSafe for RiStr<S>

impl<S> Send for RiStr<S>

impl<S> Sync for RiStr<S>

impl<S> Unpin for RiStr<S>

impl<S> UnwindSafe for RiStr<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.