mirror of
https://github.com/logos-storage/nim-ethers.git
synced 2026-01-02 13:43:06 +00:00
30 lines
771 B
Nim
30 lines
771 B
Nim
import std/macros
|
|
import ./errors/conversion
|
|
|
|
func getErrorTypes*(procedure: NimNode): NimNode =
|
|
let pragmas = procedure[4]
|
|
var tupl = newNimNode(nnkTupleConstr)
|
|
for pragma in pragmas:
|
|
if pragma.kind == nnkExprColonExpr:
|
|
if pragma[0].eqIdent "errors":
|
|
pragma[1].expectKind(nnkBracket)
|
|
for error in pragma[1]:
|
|
tupl.add error
|
|
if tupl.len == 0:
|
|
quote do: tuple[]
|
|
else:
|
|
tupl
|
|
|
|
func addErrorHandling*(procedure: var NimNode) =
|
|
let body = procedure[6]
|
|
let errors = getErrorTypes(procedure)
|
|
procedure.body = quote do:
|
|
try:
|
|
`body`
|
|
except ProviderError as error:
|
|
if data =? error.data:
|
|
let convert = customErrorConversion(`errors`)
|
|
raise convert(error)
|
|
else:
|
|
raise error
|