// MoonURI executable usage demo
///|
fn opt_str(o : String?) -> String {
match o {
Some(s) => s
None => ""
}
}
///|
fn opt_int(o : Int?) -> String {
match o {
Some(i) => i.to_string()
None => ""
}
}
///|
fn main {
println("=================== MoonURI Demo ===================")
// 1. Parsing a complete URI
let uri_str = "https://user:password@example.com:443/path/to/page?query=1&var=hello%20world#section-1"
println("Original URI String: " + uri_str)
match @lib.parse(uri_str) {
Ok(uri) => {
println("\nParsed URI Components:")
println(" Scheme: " + opt_str(uri.scheme))
match uri.authority {
Some(auth) => {
println(" Authority:")
println(" UserInfo: " + opt_str(auth.userinfo))
println(" Host: " + auth.host)
println(" Port: " + opt_int(auth.port))
}
None => println(" Authority: None")
}
println(" Path: " + uri.path)
println(" Query: " + opt_str(uri.query))
println(" Fragment: " + opt_str(uri.fragment))
// JSON Serialization
println("\nURI Serialization:")
println(" Reconstructed String: " + uri.to_string())
println(" JSON Representation: " + uri.to_json().stringify())
}
Err(e) => println("Error parsing URI: " + e)
}
// 2. Relative URI Resolution (RFC 3986 Section 5)
println("\n=================== Relative Resolution ===================")
match @lib.parse("http://a/b/c/d;p?q") {
Ok(base_uri) => {
println("Base URI: " + base_uri.to_string())
let relative_paths = [
"g", "./g", "g/", "/g", "//g", "?y", "g?y", "#s", "g#s", "../g", "../../g",
"../../",
]
for rel in relative_paths {
match base_uri.resolve_string(rel) {
Ok(resolved) =>
println(" Resolve \"" + rel + "\" -> " + resolved.to_string())
Err(e) => println(" Error resolving \"" + rel + "\": " + e)
}
}
}
Err(e) => println("Error parsing base URI: " + e)
}
// 3. URLSearchParams Demo
println("\n=================== URLSearchParams Demo ===================")
let query_str = "?search=MoonBit+Language&category=Wasm&search=Rust"
println("Original Query String: " + query_str)
let sp = @lib.URLSearchParams::new(query_str)
println("\nParsed Query Parameters:")
println(" Has 'search'? " + sp.has("search").to_string())
println(" Get 'search': " + opt_str(sp.get("search")))
println(" Get all 'search': [" + sp.get_all("search").join(", ") + "]")
println(" Get 'category': " + opt_str(sp.get("category")))
println("\nModifying Query Parameters:")
sp.set("search", "MoonBit Compiler")
sp.append("page", "1")
sp.delete("category")
println(" Modified to_string(): ?" + sp.to_string())
}