From fff04de24bbe704c02e35b68f9cdb178c6e9b4cb Mon Sep 17 00:00:00 2001 From: Zed Date: Sun, 16 Jan 2022 18:28:40 +0100 Subject: [PATCH] Simplify new error handling --- src/apiutils.nim | 8 ++++---- src/experimental/parser/user.nim | 2 +- src/experimental/parser/utils.nim | 4 ++-- src/experimental/types/common.nim | 5 +++++ 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/apiutils.nim b/src/apiutils.nim index 85d789b..7873c22 100644 --- a/src/apiutils.nim +++ b/src/apiutils.nim @@ -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() diff --git a/src/experimental/parser/user.nim b/src/experimental/parser/user.nim index 8a77aca..f5b91ac 100644 --- a/src/experimental/parser/user.nim +++ b/src/experimental/parser/user.nim @@ -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 diff --git a/src/experimental/parser/utils.nim b/src/experimental/parser/utils.nim index 1614093..999683d 100644 --- a/src/experimental/parser/utils.nim +++ b/src/experimental/parser/utils.nim @@ -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 - body + for error {.inject.} in json.fromJson(Errors).errors: + body diff --git a/src/experimental/types/common.nim b/src/experimental/types/common.nim index 90667dc..e979015 100644 --- a/src/experimental/types/common.nim +++ b/src/experimental/types/common.nim @@ -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