when (NimMajor, NimMinor) < (1, 4): {.push raises: [Defect].} else: {.push raises: [].} import std/typetraits, stew/results, chronicles, presto/common import ./serdes const MIMETYPE_JSON* = MediaType.init("application/json") const MIMETYPE_TEXT* = MediaType.init("text/plain") proc ok*(t: typedesc[RestApiResponse]): RestApiResponse = RestApiResponse.response("OK", Http200, $MIMETYPE_TEXT) proc internalServerError*(t: typedesc[RestApiResponse], msg: string = ""): RestApiResponse = RestApiResponse.error(Http500, msg, $MIMETYPE_TEXT) proc serviceUnavailable*(t: typedesc[RestApiResponse], msg: string = ""): RestApiResponse = RestApiResponse.error(Http503, msg, $MIMETYPE_TEXT) proc badRequest*(t: typedesc[RestApiResponse], msg: string = ""): RestApiResponse = RestApiResponse.error(Http400, msg, $MIMETYPE_TEXT) proc notFound*(t: typedesc[RestApiResponse], msg: string = ""): RestApiResponse = RestApiResponse.error(Http404, msg, $MIMETYPE_TEXT) proc preconditionFailed*(t: typedesc[RestApiResponse], msg: string = ""): RestApiResponse = RestApiResponse.error(Http412, msg, $MIMETYPE_TEXT) proc jsonResponse*(t: typedesc[RestApiResponse], data: auto, status: HttpCode = Http200): SerdesResult[RestApiResponse] = let encoded = ?encodeIntoJsonBytes(data) ok(RestApiResponse.response(encoded, status, $MIMETYPE_JSON)) proc textResponse*(t: typedesc[RestApiResponse], data: string, status: HttpCode = Http200): RestApiResponse = RestApiResponse.response(data, status, $MIMETYPE_TEXT)