Bladeren bron

Simplify new error handling

Zed 4 jaren geleden
bovenliggende
commit
fff04de24b
4 gewijzigde bestanden met toevoegingen van 12 en 7 verwijderingen
  1. 4 4
      src/apiutils.nim
  2. 1 1
      src/experimental/parser/user.nim
  3. 2 2
      src/experimental/parser/utils.nim
  4. 5 0
      src/experimental/types/common.nim

+ 4 - 4
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()

+ 1 - 1
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

+ 2 - 2
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

+ 5 - 0
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