use nom::combinator::all_consuming;
use self::details::decompose_uri_reference;
pub(crate) use self::details::{
absolute_uri, fragment, path, relative_ref, uri, uri_reference, IriRule, UriRule,
};
pub use crate::types::IriReferenceStr;
mod details;
#[derive(Debug, Clone)]
pub(crate) struct IriReferenceComponents<'a> {
pub(crate) scheme: Option<&'a str>,
pub(crate) authority: Option<&'a str>,
pub(crate) path: &'a str,
pub(crate) query: Option<&'a str>,
pub(crate) fragment: Option<&'a str>,
}
impl<'a> From<&'a IriReferenceStr> for IriReferenceComponents<'a> {
fn from(s: &'a IriReferenceStr) -> Self {
all_consuming(decompose_uri_reference::<(), IriRule>)(s)
.map(|(_rest, components)| components)
.expect("Should never fail: `IriReferenceStr` should be already validated")
}
}