pub fn relative_ref<S: Spec>(s: &str) -> Result<(), Error>
Expand description
Validates relative reference.
This validator corresponds to RiRelativeStr
and RiRelativeString
types.
ยงValid values
This type can have a relative IRI reference.
use iri_string::{spec::UriSpec, validate::relative_ref};
assert!(relative_ref::<UriSpec>("foo").is_ok());
assert!(relative_ref::<UriSpec>("foo/bar").is_ok());
assert!(relative_ref::<UriSpec>("/foo").is_ok());
assert!(relative_ref::<UriSpec>("//foo/bar").is_ok());
assert!(relative_ref::<UriSpec>("?foo").is_ok());
assert!(relative_ref::<UriSpec>("#foo").is_ok());
assert!(relative_ref::<UriSpec>("foo/bar?baz#qux").is_ok());
// The first path component can have colon if the path is absolute.
assert!(relative_ref::<UriSpec>("/foo:bar/").is_ok());
// Second or following path components can have colon.
assert!(relative_ref::<UriSpec>("foo/bar://baz/").is_ok());
assert!(relative_ref::<UriSpec>("./foo://bar").is_ok());
Absolute form of a reference is not allowed.
use iri_string::{spec::UriSpec, validate::relative_ref};
assert!(relative_ref::<UriSpec>("https://example.com/").is_err());
// The first path component cannot have colon, if the path is not absolute.
assert!(relative_ref::<UriSpec>("foo:bar").is_err());
assert!(relative_ref::<UriSpec>("foo:").is_err());
assert!(relative_ref::<UriSpec>("foo:/").is_err());
assert!(relative_ref::<UriSpec>("foo://").is_err());
assert!(relative_ref::<UriSpec>("foo:///").is_err());
assert!(relative_ref::<UriSpec>("foo:////").is_err());
assert!(relative_ref::<UriSpec>("foo://///").is_err());
Some characters and sequences cannot used in an IRI reference.
use iri_string::{spec::UriSpec, validate::relative_ref};
// `<` and `>` cannot directly appear in a relative IRI reference.
assert!(relative_ref::<UriSpec>("<not allowed>").is_err());
// Broken percent encoding cannot appear in a relative IRI reference.
assert!(relative_ref::<UriSpec>("%").is_err());
assert!(relative_ref::<UriSpec>("%GG").is_err());