///|
using @crescent {type HttpResponse}
///|
struct Person {
name : String
age : Int
} derive(ToJson, FromJson)
///|
async fn main {
let app = @crescent.App()
// Text Response
app
..get("/", _ => "Tadaa!")
// Object Response using json_value
..get("/json", _ => {
HttpResponse::ok().json_value({ name: "oboard", age: 21, })
})
// JSON Request using event.req.json[T]() with post for auto error handling
// curl --location 'localhost:4000/json' \
// --header 'Content-Type: application/json' \
// --data '{
// "name": "oboard",
// "age": 21
// }'
..post("/json", event => {
let person : Person = event.req.json()
HttpResponse::ok().body(
"Hello, \{person.name}. You are \{person.age} years old.",
)
})
// Echo Server
..post("/echo", e => e.req)
// Error response helpers
..get("/error", _ => HttpResponse::error(BadRequest, "Something went wrong"))
// 404 Page
.get("/404", _ => {
HttpResponse::not_found().body(
@crescent.html(
(
#|
#|
#| 404
#|
#|
),
),
)
})
// Print Server URL
for path in app.routes() {
println("\{path.0} http://localhost:4000\{path.1}")
}
// Serve
app.serve(port=4000) catch {
err => println("Server error: \{err}")
}
}