sarif_rust 0.3.0

A comprehensive Rust library for parsing, generating, and manipulating SARIF (Static Analysis Results Interchange Format) v2.1.0 files
Documentation
//! URI utilities for SARIF

use crate::parser::{ValidationError, ValidationResult};
use url::Url;

/// Validate a URI string
pub fn validate_uri(uri: &str) -> ValidationResult<()> {
    Url::parse(uri)
        .or_else(|_| {
            // Try as a relative URI
            Url::parse(&format!("file://{}", uri))
        })
        .map_err(|_| ValidationError::invalid_uri(uri))?;
    Ok(())
}

/// Check if a URI is absolute
pub fn is_absolute_uri(uri: &str) -> bool {
    Url::parse(uri).is_ok()
}

/// Check if a URI is relative
pub fn is_relative_uri(uri: &str) -> bool {
    !is_absolute_uri(uri)
}

/// Resolve a relative URI against a base 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())
}

/// Normalize a URI string
pub fn normalize_uri(uri: &str) -> ValidationResult<String> {
    let url = Url::parse(uri).map_err(|_| ValidationError::invalid_uri(uri))?;
    Ok(url.to_string())
}