Simplify new error handling

This commit is contained in:
Zed 2022-01-16 18:28:40 +01:00
parent 3d91ae0256
commit fff04de24b
4 changed files with 12 additions and 7 deletions

View File

@ -1,8 +1,8 @@
# SPDX-License-Identifier: AGPL-3.0-only
import httpclient, asyncdispatch, options, sequtils, strutils, uri
import httpclient, asyncdispatch, options, strutils, uri
import jsony, packedjson, zippy
import types, tokens, consts, parserutils, http_pool
from experimental/types/common import Errors, ErrorObj
import experimental/types/common
const
rlRemaining = "x-rate-limit-remaining"
@ -108,8 +108,8 @@ proc fetchRaw*(url: Uri; api: Api): Future[string] {.async.} =
updateToken()
if result.startsWith("{\"errors"):
let errors = result.fromJson(Errors).errors
if errors.anyIt(it.code in {invalidToken, forbidden, badToken}):
let errors = result.fromJson(Errors)
if errors in {invalidToken, forbidden, badToken}:
echo "fetch error: ", errors
release(token, invalid=true)
raise rateLimitError()

View File

@ -40,7 +40,7 @@ proc getBanner(user: User): string =
proc parseUser*(json: string): Profile =
handleErrors:
case error
case error.code
of suspended: return Profile(suspended: true)
of userNotFound: return
else: echo "[error - parseUser]: ", error

View File

@ -18,5 +18,5 @@ proc getImageUrl*(url: string): string =
template handleErrors*(body) =
if json.startsWith("{\"errors"):
let error {.inject.} = json.fromJson(Errors).errors[0].code
for error {.inject.} in json.fromJson(Errors).errors:
body

View File

@ -13,3 +13,8 @@ type
Errors* = object
errors*: seq[ErrorObj]
proc contains*(codes: set[Error]; errors: Errors): bool =
for e in errors.errors:
if e.code in codes:
return true