pub type IriReferenceStr = RiReferenceStr<IriSpec>;
Expand description
A type alias for RiReferenceStr
<
IriSpec
>
.
Aliased Type§
pub struct IriReferenceStr { /* private fields */ }
Implementations§
Source§impl IriReferenceStr
Conversion from an IRI into a URI.
impl IriReferenceStr
Conversion from an IRI into a URI.
Sourcepub fn encode_to_uri(&self) -> MappedToUri<'_, Self>
pub fn encode_to_uri(&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
type.
§Examples
use iri_string::format::ToDedicatedString;
use iri_string::types::{IriReferenceStr, UriReferenceString};
let iri = IriReferenceStr::new("http://example.com/?alpha=\u{03B1}")?;
// Type annotation here is not necessary.
let uri: UriReferenceString = iri.encode_to_uri().to_dedicated_string();
assert_eq!(uri, "http://example.com/?alpha=%CE%B1");
Sourcepub fn as_uri(&self) -> Option<&UriReferenceStr>
pub fn as_uri(&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 iri_string::types::{IriReferenceStr, UriReferenceStr};
let ascii_iri = IriReferenceStr::new("http://example.com/?alpha=%CE%B1")?;
assert_eq!(
ascii_iri.as_uri().map(AsRef::as_ref),
Some("http://example.com/?alpha=%CE%B1")
);
let nonascii_iri = IriReferenceStr::new("http://example.com/?alpha=\u{03B1}")?;
assert_eq!(nonascii_iri.as_uri(), None);
Source§impl<S: Spec> RiReferenceStr<S>
impl<S: Spec> RiReferenceStr<S>
Sourcepub fn to_iri(&self) -> Result<&RiStr<S>, &RiRelativeStr<S>>
pub fn to_iri(&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 &RiRelativeStr
is returned as Err(_)
.
Sourcepub fn to_relative_iri(&self) -> Result<&RiRelativeStr<S>, &RiStr<S>>
pub fn to_relative_iri(&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 &RiStr
is returned as Err(_)
.
Sourcepub fn resolve_against<'a>(
&'a self,
base: &'a RiAbsoluteStr<S>,
) -> Normalized<'a, RiStr<S>>
pub fn resolve_against<'a>( &'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:g
is
always interpreted as a composition of the scheme http
and the path
g
), 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
module.
Sourcepub fn mask_password(&self) -> PasswordMasked<'_, Self>
pub fn mask_password(&self) -> PasswordMasked<'_, Self>
Returns the proxy to the IRI with password masking feature.
§Examples
use iri_string::format::ToDedicatedString;
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("http://user:password@example.com/path?query")?;
let masked = iri.mask_password();
assert_eq!(masked.to_dedicated_string(), "http://user:@example.com/path?query");
assert_eq!(
masked.replace_password("${password}").to_string(),
"http://user:${password}@example.com/path?query"
);
Source§impl<S: Spec> RiReferenceStr<S>
Components getters.
impl<S: Spec> RiReferenceStr<S>
Components getters.
Sourcepub fn scheme_str(&self) -> Option<&str>
pub fn scheme_str(&self) -> Option<&str>
Returns the scheme.
The following colon is truncated.
§Examples
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("http://example.com/pathpath?queryquery#fragfrag")?;
assert_eq!(iri.scheme_str(), Some("http"));
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("foo/bar:baz")?;
assert_eq!(iri.scheme_str(), None);
Returns the authority.
The leading //
is truncated.
§Examples
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("http://example.com/pathpath?queryquery#fragfrag")?;
assert_eq!(iri.authority_str(), Some("example.com"));
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("urn:uuid:10db315b-fcd1-4428-aca8-15babc9a2da2")?;
assert_eq!(iri.authority_str(), None);
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("foo/bar:baz")?;
assert_eq!(iri.authority_str(), None);
Sourcepub fn path_str(&self) -> &str
pub fn path_str(&self) -> &str
Returns the path.
§Examples
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("http://example.com/pathpath?queryquery#fragfrag")?;
assert_eq!(iri.path_str(), "/pathpath");
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("urn:uuid:10db315b-fcd1-4428-aca8-15babc9a2da2")?;
assert_eq!(iri.path_str(), "uuid:10db315b-fcd1-4428-aca8-15babc9a2da2");
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("foo/bar:baz")?;
assert_eq!(iri.path_str(), "foo/bar:baz");
Sourcepub fn query(&self) -> Option<&RiQueryStr<S>>
pub fn query(&self) -> Option<&RiQueryStr<S>>
Returns the query.
The leading question mark (?
) is truncated.
§Examples
use iri_string::types::{IriQueryStr, IriReferenceStr};
let iri = IriReferenceStr::new("http://example.com/pathpath?queryquery#fragfrag")?;
let query = IriQueryStr::new("queryquery")?;
assert_eq!(iri.query(), Some(query));
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("urn:uuid:10db315b-fcd1-4428-aca8-15babc9a2da2")?;
assert_eq!(iri.query(), None);
use iri_string::types::{IriQueryStr, IriReferenceStr};
let iri = IriReferenceStr::new("foo/bar:baz?")?;
let query = IriQueryStr::new("")?;
assert_eq!(iri.query(), Some(query));
Sourcepub fn query_str(&self) -> Option<&str>
pub fn query_str(&self) -> Option<&str>
Returns the query as a raw string slice.
The leading question mark (?
) is truncated.
§Examples
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("http://example.com/pathpath?queryquery#fragfrag")?;
assert_eq!(iri.query_str(), Some("queryquery"));
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("urn:uuid:10db315b-fcd1-4428-aca8-15babc9a2da2")?;
assert_eq!(iri.query_str(), None);
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("foo/bar:baz?")?;
assert_eq!(iri.query_str(), Some(""));
Sourcepub fn fragment(&self) -> Option<&RiFragmentStr<S>>
pub fn fragment(&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.
let iri = IriReferenceStr::new("foo://bar/baz?qux=quux#corge")?;
let fragment = IriFragmentStr::new("corge")?;
assert_eq!(iri.fragment(), Some(fragment));
let iri = IriReferenceStr::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 = IriReferenceStr::new("foo://bar/baz?qux=quux#")?;
let fragment = IriFragmentStr::new("")?;
assert_eq!(iri.fragment(), Some(fragment));
let iri = IriReferenceStr::new("#")?;
let fragment = IriFragmentStr::new("")?;
assert_eq!(iri.fragment(), Some(fragment));
If the IRI has no fragment, None
is returned.
let iri = IriReferenceStr::new("foo://bar/baz?qux=quux")?;
assert_eq!(iri.fragment(), None);
let iri = IriReferenceStr::new("")?;
assert_eq!(iri.fragment(), None);
Sourcepub fn fragment_str(&self) -> Option<&str>
pub fn fragment_str(&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.
let iri = IriReferenceStr::new("foo://bar/baz?qux=quux#corge")?;
assert_eq!(iri.fragment_str(), Some("corge"));
let iri = IriReferenceStr::new("#foo")?;
assert_eq!(iri.fragment_str(), Some("foo"));
When the fragment part exists but is empty string, Some(_)
is returned.
let iri = IriReferenceStr::new("foo://bar/baz?qux=quux#")?;
assert_eq!(iri.fragment_str(), Some(""));
let iri = IriReferenceStr::new("#")?;
assert_eq!(iri.fragment_str(), Some(""));
If the IRI has no fragment, None
is returned.
let iri = IriReferenceStr::new("foo://bar/baz?qux=quux")?;
assert_eq!(iri.fragment(), None);
let iri = IriReferenceStr::new("")?;
assert_eq!(iri.fragment(), None);
Returns the authority components.
§Examples
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("http://user:pass@example.com:8080/pathpath?queryquery")?;
let authority = iri.authority_components()
.expect("authority is available");
assert_eq!(authority.userinfo(), Some("user:pass"));
assert_eq!(authority.host(), "example.com");
assert_eq!(authority.port(), Some("8080"));
use iri_string::types::IriReferenceStr;
let iri = IriReferenceStr::new("foo//bar:baz")?;
assert_eq!(iri.authority_str(), None);
Source§impl<S: Spec> RiReferenceStr<S>
impl<S: Spec> RiReferenceStr<S>
Sourcepub unsafe fn new_unchecked(s: &str) -> &Self
pub unsafe fn new_unchecked(s: &str) -> &Self
Creates 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 Self
type.
If not, any use of the returned value or the call of this
function itself may result in undefined behavior.