mod utils;
use read_url::*;
pub fn main() -> Result<(), UrlError> {
let context = UrlContext::new();
utils::heading("http", true);
let url = context.url("http://localhost:8000/files/two.txt")?;
utils::dump(&url)?;
utils::heading("https", false);
let url =
context.url("https://raw.githubusercontent.com/tliron/rust-read-url/refs/heads/main/assets/files/two.txt")?;
utils::dump(&url)?;
utils::heading("tar (no compression)", false);
let url = context.url("tar:http://localhost:8000/archives/archive.tar!two.txt")?;
utils::dump(&url)?;
utils::heading("tar (gzip)", false);
let url = context.url("tar:http://localhost:8000/archives/archive.tar.gz!two.txt")?;
utils::dump(&url)?;
utils::heading("tar (zstd)", false);
let url = context.url("tar:http://localhost:8000/archives/archive.tar.zst!two.txt")?;
utils::dump(&url)?;
utils::heading("tar (nested)", false);
let url = context.url("tar:tar:http://localhost:8000/archives/nested.tar.gz!archive.tar.gz!two.txt")?;
utils::dump(&url)?;
utils::heading("zip", false);
let url = context.url("zip:http://localhost:8000/archives/archive.zip!two.txt")?;
utils::dump(&url)?;
utils::heading("git", false);
let url = context.url("git:https://github.com/tliron/rust-read-url.git!assets/files/two.txt")?;
utils::dump(&url)?;
let context = context.with_base_urls(vec![
context.working_dir_url()?,
context.absolute_url("https://raw.githubusercontent.com/tliron/rust-read-url/refs/heads/")?,
]);
utils::heading("relative to working dir", false);
let url = context.url("assets/files/two.txt")?;
utils::dump(&url)?;
utils::heading("relative to http", false);
let url = context.url("tar:assets/archives/archive.tar.gz!two.txt")?;
utils::dump(&url)?;
utils::heading("absolute", false);
let mut url = context
.absolute_url("https://raw.githubusercontent.com/tliron/rust-read-url/refs/heads/main/assets/files/two.txt")?;
url.conform()?;
utils::dump(&url)?;
utils::heading("url_or_file_path (absolute file)", false);
let url = context.url_or_file_path("/etc/fstab")?;
utils::about(&url);
utils::heading("url_or_file_path (absolute url)", false);
let url = context.url_or_file_path("http://localhost:8000/files/two.txt")?;
utils::dump(&url)?;
utils::heading("url_or_file_path (relative)", false);
let url = context.url_or_file_path("assets/files/two.txt")?;
utils::dump(&url)?;
utils::heading("file", false);
let url = context.url_or_file_path("file:///etc/fstab")?;
utils::about(&url);
utils::heading("query and fragment", false);
let url = context.url_or_file_path("file:///etc/fstab?key1=value1&key2=value2#extra-stuff-here")?;
utils::about(&url);
Ok(())
}