///|
/// Routes kept in one table, apart from the handlers they point at. `path`,
/// `view` and `group` each make an entry; `app.urls` registers them in order,
/// the order a request tries them in.
///
/// moon run src/examples/21-route-table
#coverage.skip
async fn main {
let app = @moonapi.App::new()
app.urls([
@moonapi.path("/", home),
@moonapi.path("/items", create_item, methods=[Post]),
@moonapi.group("/admin", [@moonapi.path("/stats", stats)], tags=["admin"]),
])
for request in [("GET", "/"), ("POST", "/items"), ("GET", "/admin/stats")] {
let r = app.handle({
http_method: request.0,
path: request.1,
query_string: b"",
headers: [],
body: b"",
})
println(
"\{request.0} \{request.1} -> \{r.status} \{@utf8.decode_lossy(r.body[:])}",
)
}
}
///|
let home : @moonapi.ApiHandler = _ctx => @moonapi.text(200, "home")
///|
let create_item : @moonapi.ApiHandler = _ctx => @moonapi.text(201, "created")
///|
let stats : @moonapi.ApiHandler = _ctx => @moonapi.text(200, "3 items")