Struct RiReferenceStr
struct RiReferenceStr<S> { ... }
A borrowed string of an absolute IRI possibly with fragment part.
This corresponds to IRI-reference rule in RFC 3987
(and URI-reference rule in RFC 3986).
The rule for IRI-reference is IRI / irelative-ref.
In other words, this is union of RiStr and RiRelativeStr.
Valid values
This type can have an IRI reference (which can be absolute or relative).
# use IriReferenceStr;
assert!;
assert!;
assert!;
assert!;
assert!;
assert!;
// `foo://.../` below are all allowed. See the crate documentation for detail.
assert!;
assert!;
assert!;
assert!;
assert!;
assert!;
assert!;
assert!;
assert!;
Some characters and sequences cannot used in an IRI reference.
# use IriReferenceStr;
// `<` and `>` cannot directly appear in an IRI reference.
assert!;
// Broken percent encoding cannot appear in an IRI reference.
assert!;
assert!;
Implementations
impl RiReferenceStr<IriSpec>
fn encode_to_uri(self: &Self) -> MappedToUri<'_, Self>Percent-encodes the IRI into a valid URI that identifies the equivalent resource.
If you need more precise control over memory allocation and buffer handling, use [
MappedToUri]crate::convert::MappedToUritype.Examples
# use Error; # # Ok::fn as_uri(self: &Self) -> Option<&UriReferenceStr>Converts an IRI into a URI without modification, if possible.
This is semantically equivalent to
UriReferenceStr::new(self.as_str()).ok().Examples
# use Error; use ; let ascii_iri = new?; assert_eq!; let nonascii_iri = new?; assert_eq!; # Ok::
impl<S: Spec> RiReferenceStr<S>
fn scheme_str(self: &Self) -> Option<&str>Returns the scheme.
The following colon is truncated.
Examples
# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::Returns the authority.
The leading
//is truncated.Examples
# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::fn path_str(self: &Self) -> &strReturns the path.
Examples
# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::fn query(self: &Self) -> Option<&RiQueryStr<S>>Returns the query.
The leading question mark (
?) is truncated.Examples
# use Error; use ; let iri = new?; let query = new?; assert_eq!; # Ok::# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::# use Error; use ; let iri = new?; let query = new?; assert_eq!; # Ok::fn query_str(self: &Self) -> Option<&str>Returns the query as a raw string slice.
The leading question mark (
?) is truncated.Examples
# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::fn fragment(self: &Self) -> Option<&RiFragmentStr<S>>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.# use ; let iri = new?; let fragment = new?; assert_eq!; # Ok::# use ; let iri = new?; let fragment = new?; assert_eq!; # Ok::When the fragment part exists but is empty string,
Some(_)is returned.# use ; let iri = new?; let fragment = new?; assert_eq!; # Ok::# use ; let iri = new?; let fragment = new?; assert_eq!; # Ok::If the IRI has no fragment,
Noneis returned.# use ; let iri = new?; assert_eq!; # Ok::# use ; let iri = new?; assert_eq!; # Ok::fn fragment_str(self: &Self) -> Option<&str>Returns the fragment part as a raw string slice if exists.
A leading
#character is truncated if the fragment part exists.Examples
If the IRI has a fragment part,
Some(_)is returned.# use ; let iri = new?; assert_eq!; # Ok::# use ; let iri = new?; assert_eq!; # Ok::When the fragment part exists but is empty string,
Some(_)is returned.# use ; let iri = new?; assert_eq!; # Ok::# use ; let iri = new?; assert_eq!; # Ok::If the IRI has no fragment,
Noneis returned.# use ; let iri = new?; assert_eq!; # Ok::# use ; let iri = new?; assert_eq!; # Ok::Returns the authority components.
Examples
# use Error; use IriReferenceStr; let iri = new?; let authority = iri.authority_components .expect; assert_eq!; assert_eq!; assert_eq!; # Ok::# use Error; use IriReferenceStr; let iri = new?; assert_eq!; # Ok::
impl<S: Spec> RiReferenceStr<S>
fn to_iri(self: &Self) -> Result<&RiStr<S>, &RiRelativeStr<S>>Returns the string as
&RiStr, if it is valid as an IRI.If it is not an IRI, then
&RiRelativeStris returned asErr(_).fn to_relative_iri(self: &Self) -> Result<&RiRelativeStr<S>, &RiStr<S>>Returns the string as
&RiRelativeStr, if it is valid as an IRI.If it is not an IRI, then
&RiStris returned asErr(_).fn resolve_against<'a>(self: &'a Self, base: &'a RiAbsoluteStr<S>) -> Normalized<'a, RiStr<S>>Returns resolved IRI against the given base IRI.
For IRI reference resolution output examples, see RFC 3986 section 5.4.
If you are going to resolve multiple references against the common base, consider using
FixedBaseResolver.Strictness
The IRI parsers provided by this crate is strict (e.g.
http:gis always interpreted as a composition of the schemehttpand the pathg), so backward compatible parsing and resolution are not provided. About parser and 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.
Failures
This method itself does not fail, but IRI resolution without WHATWG URL Standard serialization can fail in some minor cases.
To see examples of such unresolvable IRIs, visit the documentation for [
normalize]crate::normalizemodule.fn mask_password(self: &Self) -> PasswordMasked<'_, Self>Returns the proxy to the IRI with password masking feature.
Examples
# use Error; # # Ok::
impl<S: crate::spec::Spec> RiReferenceStr<S>
fn new(s: &str) -> Result<&Self, Error>Creates a new string.
unsafe fn new_unchecked(s: &str) -> &SelfCreates a new string without validation.
This does not validate the given string, so it is caller's responsibility to ensure the given string is valid.
Safety
The given string must be syntactically valid as
Selftype. If not, any use of the returned value or the call of this function itself may result in undefined behavior.fn as_str(self: &Self) -> &strReturns
&str.fn len(self: &Self) -> usizeReturns the string length.
fn is_empty(self: &Self) -> boolReturns whether the string is empty.
impl<S> Freeze for RiReferenceStr<S>
impl<S> RefUnwindSafe for RiReferenceStr<S>
impl<S> Send for RiReferenceStr<S>
impl<S> Sized for RiReferenceStr<S>
impl<S> Sync for RiReferenceStr<S>
impl<S> Unpin for RiReferenceStr<S>
impl<S> UnsafeUnpin for RiReferenceStr<S>
impl<S> UnwindSafe for RiReferenceStr<S>
impl<S: Spec> Buildable for RiReferenceStr<S>
impl<S: crate::spec::Spec> AsRef for RiReferenceStr<S>
fn as_ref(self: &Self) -> &RiReferenceStr<S>
impl<S: crate::spec::Spec> AsRef for RiReferenceStr<S>
fn as_ref(self: &Self) -> &str
impl<S: crate::spec::Spec> Debug for RiReferenceStr<S>
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result
impl<S: crate::spec::Spec> Display for RiReferenceStr<S>
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result
impl<S: crate::spec::Spec> Eq for RiReferenceStr<S>
impl<S: crate::spec::Spec> Hash for RiReferenceStr<S>
fn hash<H: core::hash::Hasher>(self: &Self, state: &mut H)
impl<S: crate::spec::Spec> Ord for RiReferenceStr<S>
fn cmp(self: &Self, other: &Self) -> Ordering
impl<S: crate::spec::Spec> PartialEq for RiReferenceStr<S>
fn eq(self: &Self, other: &Self) -> bool
impl<S: crate::spec::Spec> PartialEq for RiReferenceStr<S>
fn eq(self: &Self, o: &Cow<'_, str>) -> bool
impl<S: crate::spec::Spec> PartialEq for RiReferenceStr<S>
fn eq(self: &Self, o: &&str) -> bool
impl<S: crate::spec::Spec> PartialEq for RiReferenceStr<S>
fn eq(self: &Self, o: &str) -> bool
impl<S: crate::spec::Spec> PartialOrd for RiReferenceStr<S>
fn partial_cmp(self: &Self, o: &str) -> Option<Ordering>
impl<S: crate::spec::Spec> PartialOrd for RiReferenceStr<S>
fn partial_cmp(self: &Self, other: &Self) -> Option<Ordering>
impl<S: crate::spec::Spec> PartialOrd for RiReferenceStr<S>
fn partial_cmp(self: &Self, o: &Cow<'_, str>) -> Option<Ordering>
impl<S: crate::spec::Spec> PartialOrd for RiReferenceStr<S>
fn partial_cmp(self: &Self, o: &&str) -> Option<Ordering>
impl<S: crate::spec::Spec> ToOwned for RiReferenceStr<S>
fn to_owned(self: &Self) -> <Self as >::Owned
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<S>
fn eq(self: &Self, o: &RiReferenceString<T>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &RiRelativeString<S>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &Cow<'_, RiStr<S>>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &&RiAbsoluteStr<S>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &&RiStr<S>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &Cow<'_, RiRelativeStr<S>>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &RiAbsoluteStr<S>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &RiStr<S>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &Cow<'_, RiAbsoluteStr<S>>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &&RiRelativeStr<S>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &RiRelativeStr<S>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &&RiReferenceStr<S>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &RiString<S>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialEq for RiReferenceStr<T>
fn eq(self: &Self, o: &RiAbsoluteString<S>) -> bool
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<S>
fn partial_cmp(self: &Self, o: &RiReferenceString<T>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &RiString<S>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &RiAbsoluteString<S>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &RiRelativeString<S>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &Cow<'_, RiStr<S>>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &&RiAbsoluteStr<S>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &&RiStr<S>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &Cow<'_, RiRelativeStr<S>>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &RiAbsoluteStr<S>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &RiStr<S>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &Cow<'_, RiAbsoluteStr<S>>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &&RiRelativeStr<S>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &RiRelativeStr<S>) -> Option<Ordering>
impl<S: crate::spec::Spec, T: crate::spec::Spec> PartialOrd for RiReferenceStr<T>
fn partial_cmp(self: &Self, o: &&RiReferenceStr<S>) -> Option<Ordering>
impl<T> Any for RiReferenceStr<S>
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for RiReferenceStr<S>
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for RiReferenceStr<S>
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> ToString for RiReferenceStr<S>
fn to_string(self: &Self) -> String