///|
async fn main {
  let app = @crescent.App()
  // Use get_raw to avoid the error-wrapping overhead on the hot path.
  // These handlers never raise, so automatic error mapping is pure cost.
  app.get_raw("/text", _ => "Hello, World!")
  app.get_raw("/json", _ => ({ "message": "Hello, World!" } : Json))
  app.get_raw("/user/:id", event => {
    let id = event.param("id").unwrap_or("0")
    ({ "id": id, "name": "User \{id}" } : Json)
  })
  println("App server listening on port 3001")
  app.serve(port=3001) catch {
    err => println("Server error: \{err}")
  }
}