use crate::parser::{ValidationError, ValidationResult};
use url::Url;
pub fn validate_uri(uri: &str) -> ValidationResult<()> {
Url::parse(uri)
.or_else(|_| {
Url::parse(&format!("file://{}", uri))
})
.map_err(|_| ValidationError::invalid_uri(uri))?;
Ok(())
}
pub fn is_absolute_uri(uri: &str) -> bool {
Url::parse(uri).is_ok()
}
pub fn is_relative_uri(uri: &str) -> bool {
!is_absolute_uri(uri)
}
pub fn resolve_uri(base: &str, relative: &str) -> ValidationResult<String> {
let base_url = Url::parse(base).map_err(|_| ValidationError::invalid_uri(base))?;
let resolved = base_url
.join(relative)
.map_err(|_| ValidationError::invalid_uri(relative))?;
Ok(resolved.to_string())
}
pub fn normalize_uri(uri: &str) -> ValidationResult<String> {
let url = Url::parse(uri).map_err(|_| ValidationError::invalid_uri(uri))?;
Ok(url.to_string())
}