53b43b0f79
Ship the QUALITY_PLAN stretch from ownership through ecosystem: C.1 lifetime elision (bootstrap + selfhost), bux fmt/test/doc CI hooks, stdlib goldens, package registry (bux search/add), and LSP 0.4 position-sensitive locals with inferred let types. Full-tree format pass plus Map/Set remove double-free fix.
47 lines
1.3 KiB
Plaintext
47 lines
1.3 KiB
Plaintext
module Router {
|
|
|
|
import Std::Array::{Array};
|
|
import Std::String::{String_Eq};
|
|
import Http::{HttpMethod, HttpRequest, HttpResponse, Http_NewResponse};
|
|
import Handlers::{ServeStaticFile, HandleApiHealth, HandleApiInfo, HandleWebSocketUpgrade, NotFoundResponse};
|
|
|
|
pub enum Handler {
|
|
StaticFile,
|
|
ApiHealth,
|
|
ApiInfo,
|
|
WsUpgrade,
|
|
NotFound,
|
|
}
|
|
|
|
pub struct Route {
|
|
method: HttpMethod;
|
|
path: String;
|
|
handler: Handler;
|
|
}
|
|
|
|
pub struct Router {
|
|
routes: Array<Route>;
|
|
notFound: Handler;
|
|
}
|
|
|
|
pub func Handler_Handle(h: Handler, req: HttpRequest) -> HttpResponse {
|
|
match h {
|
|
Handler::StaticFile => ServeStaticFile(req),
|
|
Handler::ApiHealth => HandleApiHealth(),
|
|
Handler::ApiInfo => HandleApiInfo(),
|
|
Handler::WsUpgrade => HandleWebSocketUpgrade(req),
|
|
Handler::NotFound => NotFoundResponse(),
|
|
}
|
|
}
|
|
|
|
pub func Router_Dispatch(r: Router, req: HttpRequest) -> HttpResponse {
|
|
for route in r.routes {
|
|
if route.method == req.method && String_Eq(route.path, req.path) {
|
|
return Handler_Handle(route.handler, req);
|
|
}
|
|
}
|
|
return Handler_Handle(r.notFound, req);
|
|
}
|
|
|
|
}
|