///|
struct BenchUser {
  id : Int
  name : String
} derive(ToJson, FromJson)

///|
async fn main {
  let app = @crescent.App()

  // Plain text (baseline, same as app_bench)
  app.get("/text", _ => "Hello, World!")

  // JSON using old pattern (Json literal)
  app.get("/json-raw", _ => ({ "message": "Hello, World!" } : Json))

  // JSON using typed json_value
  app.get("/json-typed", _ => {
    let user : BenchUser = { id: 1, name: "Alice", }
    @crescent.HttpResponse::ok().json_value(user)
  })

  // POST with typed JSON parsing (post + req.json)
  app.post("/json-parse", event => {
    let user : BenchUser = event.req.json()
    @crescent.HttpResponse::ok().json_value(user)
  })

  println("App typed benchmark on port 3007")
  app.serve(port=3007) catch {
    err => println("Server error: \{err}")
  }
}