mirror of
https://github.com/logos-storage/nim-ethers.git
synced 2026-01-05 07:03:14 +00:00
Move contract error handling into its own modules
This commit is contained in:
parent
e37f454761
commit
4441050c3d
@ -1,5 +1,5 @@
|
||||
import ../provider
|
||||
import ../errors/conversion
|
||||
import ./errors/conversion
|
||||
|
||||
{.push raises: [].}
|
||||
|
||||
|
||||
29
ethers/contracts/errors.nim
Normal file
29
ethers/contracts/errors.nim
Normal file
@ -0,0 +1,29 @@
|
||||
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
|
||||
@ -1,5 +1,5 @@
|
||||
import ../basics
|
||||
import ../provider
|
||||
import ../../basics
|
||||
import ../../provider
|
||||
import ./encoding
|
||||
|
||||
type ConvertCustomErrors* =
|
||||
@ -1,7 +1,7 @@
|
||||
import pkg/contractabi
|
||||
import pkg/contractabi/selector
|
||||
import ../basics
|
||||
import ../errors
|
||||
import ../../basics
|
||||
import ../../errors
|
||||
|
||||
func selector(E: type): FunctionSelector =
|
||||
when compiles(E.arguments):
|
||||
@ -1,21 +1,8 @@
|
||||
import std/macros
|
||||
import ../errors/conversion
|
||||
import ./errors/conversion
|
||||
import ./syntax
|
||||
import ./transactions
|
||||
|
||||
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
|
||||
import ./errors
|
||||
|
||||
func addContractCall(procedure: var NimNode) =
|
||||
let contractCall = getContractCall(procedure)
|
||||
@ -58,19 +45,6 @@ func addContractCall(procedure: var NimNode) =
|
||||
else:
|
||||
send()
|
||||
|
||||
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
|
||||
|
||||
func addFuture(procedure: var NimNode) =
|
||||
let returntype = procedure[3][0]
|
||||
if returntype.kind != nnkEmpty:
|
||||
|
||||
@ -3,7 +3,7 @@ import std/strutils
|
||||
import pkg/questionable/results
|
||||
import pkg/contractabi
|
||||
import pkg/ethers/errors
|
||||
import pkg/ethers/errors/encoding
|
||||
import pkg/ethers/contracts/errors/encoding
|
||||
|
||||
suite "Decoding of custom errors":
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user