///|
fn main {
run_cli(@env.args())
}
///|
fn run_cli(args : Array[String]) -> Unit {
let normalized = normalize_args(args)
if normalized.is_empty() ||
normalized[0] == "help" ||
normalized[0] == "--help" {
print_help()
return
}
if normalized[0] == "version" || normalized[0] == "--version" {
println("range-tool \{@range.library_version()} (hjn0123/moon-http-range)")
return
}
let command = normalized[0]
let rest = normalized[1:].to_owned()
match command {
"parse" => cmd_parse(rest)
"resolve" => cmd_resolve(rest)
"content-range" => cmd_content_range(rest)
"accept-ranges" => cmd_accept_ranges(rest)
"plan" => cmd_plan(rest)
"audit" => cmd_audit(rest)
"if-range" => cmd_if_range(rest)
"stats" => cmd_stats(rest)
_ => print_error("UnknownCommand", "unknown command: \{command}")
}
}
///|
fn normalize_args(args : Array[String]) -> Array[String] {
for i = 0; i < args.length(); i = i + 1 {
if known_command(args[i]) {
return args[i:].to_owned()
}
}
if args.is_empty() {
[]
} else {
args[args.length() - 1:].to_owned()
}
}
///|
fn known_command(value : String) -> Bool {
value == "parse" ||
value == "resolve" ||
value == "content-range" ||
value == "accept-ranges" ||
value == "plan" ||
value == "audit" ||
value == "if-range" ||
value == "stats" ||
value == "version" ||
value == "help" ||
value == "--version" ||
value == "--help"
}
///|
fn print_help() -> Unit {
println("range-tool 0.1.0 — RFC 9110 byte-range toolkit")
println(
"usage: range-tool [options]",
)
println("range input: --range ; representation: --length ")
println("content-range: --value ; accept-ranges: --value ")
println(
"audit: --details for per-finding JSON; if-range: --value --etag ",
)
}