diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 83bb95f..8aeca4c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,7 +13,7 @@ jobs: matrix: nimversion: - 1.4.8 - - git:6b97889f44d06f66 + - 1.6.0 os: - ubuntu-latest - macOS-latest @@ -22,11 +22,11 @@ jobs: - uses: actions/checkout@v1 with: submodules: true - - uses: iffy/install-nim@v3.2.0 + - uses: iffy/install-nim@v4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - nimversion: ${{ matrix.nimversion }} + version: ${{ matrix.nimversion }} - name: Test run: | nimble test diff --git a/jester.nim b/jester.nim index 56ac739..6950a3f 100644 --- a/jester.nim +++ b/jester.nim @@ -83,8 +83,14 @@ type of RouteCode: data: ResponseData + Startup = proc () {.closure, gcsafe.} + const jesterVer = "0.6.0" +proc doNothing(): Startup {.gcsafe.} = + result = proc () {.closure, gcsafe.} = + discard + proc toStr(headers: Option[RawHeaders]): string = return $newHttpHeaders(headers.get(@({:}))) @@ -421,7 +427,8 @@ proc handleRequest(jes: Jester, httpReq: NativeRequest): Future[void] = proc newSettings*( port = Port(5000), staticDir = getCurrentDir() / "public", appName = "", bindAddr = "", reusePort = false, maxBody = 8388608, numThreads = 0, - futureErrorHandler: proc (fut: Future[void]) {.closure, gcsafe.} = nil + futureErrorHandler: proc (fut: Future[void]) {.closure, gcsafe.} = nil, + startup: Startup = doNothing() ): Settings = result = Settings( staticDir: normalizedPath(staticDir), @@ -431,7 +438,8 @@ proc newSettings*( reusePort: reusePort, maxBody: maxBody, numThreads: numThreads, - futureErrorHandler: futureErrorHandler + futureErrorHandler: futureErrorHandler, + startup: startup ) proc register*(self: var Jester, matcher: MatchProc) = @@ -529,7 +537,7 @@ proc serve*( proc (req: httpbeast.Request): Future[void] = {.gcsafe.}: result = handleRequest(jes, req), - httpbeast.initSettings(self.settings.port, self.settings.bindAddr, self.settings.numThreads) + httpbeast.initSettings(self.settings.port, self.settings.bindAddr, self.settings.numThreads, startup = self.settings.startup) ) else: self.httpServer = newAsyncHttpServer(reusePort=self.settings.reusePort, maxBody=self.settings.maxBody) diff --git a/jester/private/utils.nim b/jester/private/utils.nim index 30684fa..799d6e7 100644 --- a/jester/private/utils.nim +++ b/jester/private/utils.nim @@ -19,6 +19,7 @@ type maxBody*: int futureErrorHandler*: proc (fut: Future[void]) {.closure, gcsafe.} numThreads*: int # Only available with Httpbeast (`useHttpBeast = true`) + startup*: proc () {.closure, gcsafe.} # Only available with Httpbeast (`useHttpBeast = true`) JesterError* = object of Exception