iri_string/types/generic.rs
1//! Generic resource identifier types.
2//!
3//! ```text
4//! IRI = scheme ":" ihier-part [ "?" iquery ] [ "#" ifragment ]
5//! IRI-reference = IRI / irelative-ref
6//! absolute-IRI = scheme ":" ihier-part [ "?" iquery ]
7//! irelative-ref = irelative-part [ "?" iquery ] [ "#" ifragment ]
8//! (`irelative-part` is roughly same as `ihier-part`.)
9//! ```
10//!
11//! Hierarchy:
12//!
13//! ```text
14//! RiReferenceStr
15//! |-- RiStr
16//! | `-- RiAbsoluteStr
17//! `-- RiRelativeStr
18//! ```
19//!
20//! Therefore, the conversions below are safe and cheap:
21//!
22//! * `RiStr -> RiReferenceStr`
23//! * `RiAbsoluteStr -> RiStr`
24//! * `RiAbsoluteStr -> RiReferenceStr`
25//! * `RiRelativeStr -> RiReferenceStr`
26//!
27//! For safely convertible types (consider `FooStr -> BarStr` is safe), traits
28//! below are implemented:
29//!
30//! * `AsRef<BarStr> for FooStr`
31//! * `AsRef<BarStr> for FooString`
32//! * `From<FooString> for BarString`
33//! * `PartialEq<FooStr> for BarStr` and lots of impls like that
34//! + `PartialEq` and `ParitalOrd`.
35//! + Slice, owned, `Cow`, reference, etc...
36
37pub use self::{
38 absolute::RiAbsoluteStr, fragment::RiFragmentStr, normal::RiStr, query::RiQueryStr,
39 reference::RiReferenceStr, relative::RiRelativeStr,
40};
41#[cfg(feature = "alloc")]
42pub use self::{
43 absolute::RiAbsoluteString, error::CreationError, fragment::RiFragmentString, normal::RiString,
44 query::RiQueryString, reference::RiReferenceString, relative::RiRelativeString,
45};
46
47#[macro_use]
48mod macros;
49
50mod absolute;
51#[cfg(feature = "alloc")]
52mod error;
53mod fragment;
54mod normal;
55mod query;
56mod reference;
57mod relative;