Skip to content

Instantly share code, notes, and snippets.

@guzba
Created January 4, 2023 19:25
Show Gist options
  • Save guzba/f213ec49f96c04a6bd1ddad87c68b8b0 to your computer and use it in GitHub Desktop.
Save guzba/f213ec49f96c04a6bd1ddad87c68b8b0 to your computer and use it in GitHub Desktop.
willyboar router with context
import mummy, mummy/routers
type
Context* = object
WillyRouter* = object
internal: Router
WillyHandler* = proc(request: Request, context: Context) {.gcsafe.}
proc addRoute*(
router: var WillyRouter,
httpMethod, route: string | static string,
handler: WillyHandler
) =
router.internal.addRoute(httpMethod, route, proc(request: Request) =
var context: Context
# Prepare the context
# Call the WillyHandler
handler(request, context)
)
proc get*(
router: var WillyRouter,
route: string | static string,
handler: WillyHandler
) =
router.addRoute("GET", route, handler)
proc indexHandler(request: Request, context: Context) =
var headers: HttpHeaders
headers["Content-Type"] = "text/plain"
request.respond(200, headers, "Hello, World!")
converter convertToHandler*(router: WillyRouter): RequestHandler =
router.internal.toHandler()
when isMainModule:
var router: WillyRouter
router.get("/", indexHandler)
let server = newServer(router)
echo "Serving on http://localhost:8080"
server.serve(Port(8080))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment