2 Commits

3 changed files with 28 additions and 8 deletions

View File

@@ -1,6 +1,6 @@
# Package # Package
version = "0.4.9" version = "0.4.11"
author = "Jonathan Bernard" author = "Jonathan Bernard"
description = "Jonathan's opinionated extensions and auth layer for Jester." description = "Jonathan's opinionated extensions and auth layer for Jester."
license = "MIT" license = "MIT"

View File

@@ -1,36 +1,56 @@
from strutils import isEmptyOrWhitespace import std/[httpcore, json, options, strutils]
from httpcore import HttpCode
type ApiError* = object of CatchableError type ApiError* = object of CatchableError
respMsg*: string respMsg*: string
respCode*: HttpCode respCode*: HttpCode
respData*: Option[JsonNode]
proc newApiError*(parent: ref Exception = nil, respCode: HttpCode, respMsg: string, msg = ""): ref ApiError = proc newApiError*(
parent: ref Exception = nil,
respCode: HttpCode,
respMsg: string,
respData = none[JsonNode](),
msg = ""): ref ApiError =
result = newException(ApiError, msg, parent) result = newException(ApiError, msg, parent)
result.respCode = respCode result.respCode = respCode
result.respMsg = respMsg result.respMsg = respMsg
result.respData = respData
if not parent.isNil: if not parent.isNil:
result.trace &= parent.trace result.trace &= parent.trace
proc raiseApiError*(respCode: HttpCode, respMsg: string, msg = "") = proc raiseApiError*(
respCode: HttpCode,
respMsg: string,
respData = none[JsonNode](),
msg = "") =
var apiError = newApiError( var apiError = newApiError(
parent = nil, parent = nil,
respCode = respCode, respCode = respCode,
respMsg = respMsg, respMsg = respMsg,
respData = respData,
msg = if msg.isEmptyOrWhitespace: respMsg msg = if msg.isEmptyOrWhitespace: respMsg
else: msg) else: msg)
raise apiError raise apiError
proc raiseApiError*(respCode: HttpCode, parent: ref Exception, respMsg: string = "", msg = "") = proc raiseApiError*(
respCode: HttpCode,
parent: ref Exception,
respMsg: string = "",
respData = none[JsonNode](),
msg = "") =
var apiError = newApiError( var apiError = newApiError(
parent = parent, parent = parent,
respCode = respCode, respCode = respCode,
respMsg = respMsg =
if respMsg.isEmptyOrWhitespace: parent.msg if respMsg.isEmptyOrWhitespace: parent.msg
else: respMsg, else: respMsg,
msg = msg) respData = respData,
msg =
if msg.isEmptyOrWhitespace: parent.msg
else: msg)
raise apiError raise apiError

View File

@@ -31,7 +31,7 @@ func initApiResponse*[T](
totalItems: totalItems, nextLink: nextLink, prevLink: prevLink) totalItems: totalItems, nextLink: nextLink, prevLink: prevLink)
func `%`*(r: ApiResponse): JsonNode = proc `%`*(r: ApiResponse): JsonNode =
result = newJObject() result = newJObject()
if r.details.isSome: result["details"] = %r.details if r.details.isSome: result["details"] = %r.details
if r.data.isSome: result["data"] = %r.data if r.data.isSome: result["data"] = %r.data