mirror of
https://github.com/logos-storage/nim-ethers.git
synced 2026-01-05 07:03:14 +00:00
Use string as callback table key
NOTE: these changes are simply to illustrate that using a string Table key compiles without the need for casting a raises exception effect onto the callback.
This commit is contained in:
parent
7973ce86ce
commit
a1eb5497a9
@ -11,7 +11,7 @@ import ./looping
|
||||
type
|
||||
JsonRpcSubscriptions* = ref object of RootObj
|
||||
client: RpcClient
|
||||
callbacks: Table[JsonNode, SubscriptionCallback]
|
||||
callbacks: Table[string, SubscriptionCallback]
|
||||
SubscriptionCallback = proc(id, arguments: JsonNode) {.gcsafe, raises:[].}
|
||||
|
||||
# FIXME Nim 1.6.XX seems to have issues tracking exception effects and will see
|
||||
@ -20,7 +20,7 @@ type
|
||||
# would fix it, but it doesn't work here for some reason I yet don't
|
||||
# understand. For now, therefore, I'm simply using a mitigation which is to
|
||||
# tell the compiler the truth.
|
||||
template mitigateEffectsBug(body) = {.cast(raises: []).}: body
|
||||
# template mitigateEffectsBug(body) = {.cast(raises: []).}: body
|
||||
|
||||
method subscribeBlocks*(subscriptions: JsonRpcSubscriptions,
|
||||
onBlock: BlockHandler):
|
||||
@ -43,13 +43,13 @@ method unsubscribe*(subscriptions: JsonRpcSubscriptions,
|
||||
method close*(subscriptions: JsonRpcSubscriptions) {.async, base.} =
|
||||
let ids = toSeq subscriptions.callbacks.keys
|
||||
for id in ids:
|
||||
await subscriptions.unsubscribe(id)
|
||||
await subscriptions.unsubscribe(%id)
|
||||
|
||||
proc getCallback(subscriptions: JsonRpcSubscriptions,
|
||||
id: JsonNode): ?SubscriptionCallback =
|
||||
try:
|
||||
if subscriptions.callbacks.hasKey(id):
|
||||
subscriptions.callbacks[id].some
|
||||
if subscriptions.callbacks.hasKey($id):
|
||||
subscriptions.callbacks[$id].some
|
||||
else:
|
||||
SubscriptionCallback.none
|
||||
except Exception:
|
||||
@ -78,7 +78,7 @@ method subscribeBlocks(subscriptions: WebSocketSubscriptions,
|
||||
if blck =? Block.fromJson(arguments["result"]).catch:
|
||||
onBlock(blck)
|
||||
let id = await subscriptions.client.eth_subscribe("newHeads")
|
||||
mitigateEffectsBug: subscriptions.callbacks[id] = callback
|
||||
subscriptions.callbacks[$id] = callback
|
||||
return id
|
||||
|
||||
method subscribeLogs(subscriptions: WebSocketSubscriptions,
|
||||
@ -90,14 +90,14 @@ method subscribeLogs(subscriptions: WebSocketSubscriptions,
|
||||
if log =? Log.fromJson(arguments["result"]).catch:
|
||||
onLog(log)
|
||||
let id = await subscriptions.client.eth_subscribe("logs", filter)
|
||||
mitigateEffectsBug: subscriptions.callbacks[id] = callback
|
||||
subscriptions.callbacks[$id] = callback
|
||||
return id
|
||||
|
||||
method unsubscribe(subscriptions: WebSocketSubscriptions,
|
||||
method unsubscribe*(subscriptions: WebSocketSubscriptions,
|
||||
id: JsonNode)
|
||||
{.async.} =
|
||||
mitigateEffectsBug: subscriptions.callbacks.del(id)
|
||||
discard await subscriptions.client.eth_unsubscribe(id)
|
||||
subscriptions.callbacks.del($id)
|
||||
discard await subscriptions.client.eth_unsubscribe(%id)
|
||||
|
||||
# Polling
|
||||
|
||||
@ -125,7 +125,7 @@ proc new*(_: type JsonRpcSubscriptions,
|
||||
proc poll {.async.} =
|
||||
untilCancelled:
|
||||
for id in toSeq subscriptions.callbacks.keys:
|
||||
await poll(id)
|
||||
await poll(%id)
|
||||
await sleepAsync(pollingInterval)
|
||||
|
||||
subscriptions.polling = poll()
|
||||
@ -152,7 +152,7 @@ method subscribeBlocks(subscriptions: PollingSubscriptions,
|
||||
asyncSpawn getBlock(hash)
|
||||
|
||||
let id = await subscriptions.client.eth_newBlockFilter()
|
||||
mitigateEffectsBug: subscriptions.callbacks[id] = callback
|
||||
subscriptions.callbacks[$id] = callback
|
||||
return id
|
||||
|
||||
method subscribeLogs(subscriptions: PollingSubscriptions,
|
||||
@ -166,11 +166,11 @@ method subscribeLogs(subscriptions: PollingSubscriptions,
|
||||
onLog(log)
|
||||
|
||||
let id = await subscriptions.client.eth_newFilter(filter)
|
||||
mitigateEffectsBug: subscriptions.callbacks[id] = callback
|
||||
subscriptions.callbacks[$id] = callback
|
||||
return id
|
||||
|
||||
method unsubscribe(subscriptions: PollingSubscriptions,
|
||||
method unsubscribe*(subscriptions: PollingSubscriptions,
|
||||
id: JsonNode)
|
||||
{.async.} =
|
||||
mitigateEffectsBug: subscriptions.callbacks.del(id)
|
||||
subscriptions.callbacks.del($id)
|
||||
discard await subscriptions.client.eth_uninstallFilter(id)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user