///|
fn show(program : @abnf.Program, input : Bytes) -> Unit {
let report = program.parse_input("request-line", input)
match @request_line.parse(program, input) {
Ok(line) => {
println(@request_line.dump(report.tree.unwrap(), input))
let (ms, me) = line.verb
let (ps, pe) = line.path
println(
"fields: method=\{input[ms:me].to_owned()} path=[\{ps},\{pe}) HTTP/\{line.major}.\{line.minor}",
)
if line.query is Some((qs, qe)) {
println(" query=[\{qs},\{qe})")
}
}
Err(why) => println("rejected \{input.length()} bytes: \{why}")
}
}
///|
fn main {
let program = @abnf.compile(@request_line.grammar()).unwrap()
show(program, b"GET /search/a%20b?q=moon&n=2 HTTP/1.1\r\n")
println("---")
show(program, b"GET index.html HTTP/1.1\r\n")
show(program, b"GET /x HTTP/1.1")
show(program, b"GET /a b HTTP/1.1\r\n")
show(program, b"GET /x http/1.1\r\n")
}