planety / prologue

Powerful and flexible web framework written in Nim
https://planety.github.io/prologue
Apache License 2.0
1.23k stars 47 forks source link

Help with unknown error: "Error: type mismatch: got <Prologue, HttpCode, proc (ctx: Context): Future[system.void]{.locks: <unknown>.}>" #196

Closed exitcas closed 1 year ago

exitcas commented 1 year ago

This error keeps happening, and I don't know why... Code:

proc go404(ctx: Context) {.async.} =
  var error = readFile("templates/error.html")
  error = error.replace("{{ header }}", header)
  error = error.replace("{{ code }}", "404")
  error = error.replace("{{ error }}", "Not found")
  error = error.replace("{{ footer }}", footer)
  resp error, Http404
# 500 error
proc go500(ctx: Context) {.async.} =
  var error = readFile("templates/error.html")
  error = error.replace("{{ header }}", header)
  error = error.replace("{{ code }}", "500")
  error = error.replace("{{ error }}", "Internal Server Error")
  error = error.replace("{{ footer }}", footer)
  resp error, Http500
app.registerErrorHandler(Http404, go404)
app.registerErrorHandler(Http500, go500)

Error:

/home/runner/[censured]/main.nim(48, 4) Error: type mismatch: got <Prologue, HttpCode, proc (ctx: Context): Future[system.void]{.locks: <unknown>.}>
but expected one of: 
proc registerErrorHandler(app: Prologue; code: HttpCode; handler: ErrorHandler)
  first type mismatch at position: 3
  required type for handler: ErrorHandler
  but expression 'go404' is of type: proc (ctx: Context): Future[system.void]{.locks: <unknown>.}
  This expression is not GC-safe. Annotate the proc with {.gcsafe.} to get extended error information.
proc registerErrorHandler(app: Prologue; code: openArray[HttpCode];
                          handler: ErrorHandler)
  first type mismatch at position: 2
  required type for code: openArray[HttpCode]
  but expression 'Http404' is of type: HttpCode
proc registerErrorHandler(app: Prologue; code: set[HttpCode];
                          handler: ErrorHandler)
  first type mismatch at position: 2
  required type for code: set[HttpCode]
  but expression 'Http404' is of type: HttpCode

expression: registerErrorHandler(app, Http404, go404)
~/[censured]$ 
ringabout commented 1 year ago

Add gcsafe pragmas, you will find where is the error from.

exitcas commented 1 year ago

It worked! Thank you!!!