style: auto-format example files with lux fmt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,24 +1,4 @@
|
||||
// HTTP Router Example
|
||||
//
|
||||
// Demonstrates the HTTP helper library with:
|
||||
// - Path pattern matching
|
||||
// - Response builders
|
||||
// - JSON helpers
|
||||
//
|
||||
// Run with: lux examples/http_router.lux
|
||||
// Test with:
|
||||
// curl http://localhost:8080/
|
||||
// curl http://localhost:8080/users
|
||||
// curl http://localhost:8080/users/42
|
||||
|
||||
import stdlib/http
|
||||
|
||||
// ============================================================
|
||||
// Route Handlers
|
||||
// ============================================================
|
||||
|
||||
fn indexHandler(): { status: Int, body: String } =
|
||||
httpOk("Welcome to Lux HTTP Framework!")
|
||||
fn indexHandler(): { status: Int, body: String } = httpOk("Welcome to Lux HTTP Framework!")
|
||||
|
||||
fn listUsersHandler(): { status: Int, body: String } = {
|
||||
let user1 = jsonObject(jsonJoin([jsonNumber("id", 1), jsonString("name", "Alice")]))
|
||||
@@ -29,44 +9,31 @@ fn listUsersHandler(): { status: Int, body: String } = {
|
||||
|
||||
fn getUserHandler(path: String): { status: Int, body: String } = {
|
||||
match getPathSegment(path, 1) {
|
||||
Some(id) => {
|
||||
let body = jsonObject(jsonJoin([jsonString("id", id), jsonString("name", "User " + id)]))
|
||||
httpOk(body)
|
||||
},
|
||||
None => httpNotFound(jsonErrorMsg("User ID required"))
|
||||
}
|
||||
Some(id) => {
|
||||
let body = jsonObject(jsonJoin([jsonString("id", id), jsonString("name", "User " + id)]))
|
||||
httpOk(body)
|
||||
},
|
||||
None => httpNotFound(jsonErrorMsg("User ID required")),
|
||||
}
|
||||
}
|
||||
|
||||
fn healthHandler(): { status: Int, body: String } =
|
||||
httpOk(jsonObject(jsonString("status", "healthy")))
|
||||
|
||||
// ============================================================
|
||||
// Router
|
||||
// ============================================================
|
||||
fn healthHandler(): { status: Int, body: String } = httpOk(jsonObject(jsonString("status", "healthy")))
|
||||
|
||||
fn router(method: String, path: String, body: String): { status: Int, body: String } = {
|
||||
if method == "GET" && path == "/" then indexHandler()
|
||||
else if method == "GET" && path == "/health" then healthHandler()
|
||||
else if method == "GET" && path == "/users" then listUsersHandler()
|
||||
else if method == "GET" && pathMatches(path, "/users/:id") then getUserHandler(path)
|
||||
else httpNotFound(jsonErrorMsg("Not found: " + path))
|
||||
if method == "GET" && path == "/" then indexHandler() else if method == "GET" && path == "/health" then healthHandler() else if method == "GET" && path == "/users" then listUsersHandler() else if method == "GET" && pathMatches(path, "/users/:id") then getUserHandler(path) else httpNotFound(jsonErrorMsg("Not found: " + path))
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
// Server
|
||||
// ============================================================
|
||||
|
||||
fn serveLoop(remaining: Int): Unit with {Console, HttpServer} = {
|
||||
if remaining <= 0 then {
|
||||
Console.print("Max requests reached, stopping server.")
|
||||
HttpServer.stop()
|
||||
} else {
|
||||
let req = HttpServer.accept()
|
||||
Console.print(req.method + " " + req.path)
|
||||
let resp = router(req.method, req.path, req.body)
|
||||
HttpServer.respond(resp.status, resp.body)
|
||||
serveLoop(remaining - 1)
|
||||
}
|
||||
Console.print("Max requests reached, stopping server.")
|
||||
HttpServer.stop()
|
||||
} else {
|
||||
let req = HttpServer.accept()
|
||||
Console.print(req.method + " " + req.path)
|
||||
let resp = router(req.method, req.path, req.body)
|
||||
HttpServer.respond(resp.status, resp.body)
|
||||
serveLoop(remaining - 1)
|
||||
}
|
||||
}
|
||||
|
||||
fn main(): Unit with {Console, HttpServer} = {
|
||||
|
||||
Reference in New Issue
Block a user