28 lines
752 B
Nim
28 lines
752 B
Nim
|
import pkg/stew/byteutils
|
||
|
import ../../provider
|
||
|
import ./conversions
|
||
|
|
||
|
type JsonRpcProviderError* = object of ProviderError
|
||
|
|
||
|
func new(_: type JsonRpcProviderError, json: JsonNode): ref JsonRpcProviderError =
|
||
|
let error = (ref JsonRpcProviderError)()
|
||
|
if "message" in json:
|
||
|
error.msg = json{"message"}.getStr
|
||
|
error
|
||
|
|
||
|
proc raiseJsonRpcProviderError*(
|
||
|
message: string) {.raises: [JsonRpcProviderError].} =
|
||
|
if json =? JsonNode.fromJson(message):
|
||
|
raise JsonRpcProviderError.new(json)
|
||
|
else:
|
||
|
raise newException(JsonRpcProviderError, message)
|
||
|
|
||
|
template convertError*(body) =
|
||
|
try:
|
||
|
body
|
||
|
except JsonRpcError as error:
|
||
|
raiseJsonRpcProviderError(error.msg)
|
||
|
except CatchableError as error:
|
||
|
raiseJsonRpcProviderError(error.msg)
|
||
|
|