use crate::*;
impl std::error::Error for HttpUrlError {}
impl Display for HttpUrlError {
#[inline(always)]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
HttpUrlError::InvalidUrl => write!(f, "Invalid URL"),
HttpUrlError::Unknown => write!(f, "Unknown error"),
}
}
}
impl From<ParseError> for HttpUrlError {
#[inline(always)]
fn from(_: ParseError) -> Self {
HttpUrlError::InvalidUrl
}
}
impl HttpUrlComponents {
#[inline]
pub fn parse<U>(url: U) -> Result<Self, HttpUrlError>
where
U: AsRef<str>,
{
let parsed_url: Url = Url::parse(url.as_ref())?;
let protocol: String = parsed_url.scheme().to_string();
let res: Self = Self {
protocol,
host: parsed_url.host_str().map(|h| h.to_string()),
port: parsed_url.port(),
path: Some(parsed_url.path().to_string()),
query: parsed_url.query().map(|q| q.to_string()),
fragment: parsed_url.fragment().map(|f| f.to_string()),
};
Ok(res)
}
}