mirror of
https://github.com/waku-org/nwaku.git
synced 2025-01-13 16:25:00 +00:00
chore: libwaku reduce repetitive code by adding a template handling resp returns (#3032)
This commit is contained in:
parent
3ccb6cdf61
commit
1713f56235
@ -52,6 +52,25 @@ template foreignThreadGc(body: untyped) =
|
||||
when declared(tearDownForeignThreadGc):
|
||||
tearDownForeignThreadGc()
|
||||
|
||||
template handleRes[T: string | void](
|
||||
res: Result[T, string], callback: WakuCallBack, userData: pointer
|
||||
) =
|
||||
## Handles the Result responses, which can either be Result[string, string] or
|
||||
## Result[void, string]. Notice that in case of Result[void, string], it is enough to
|
||||
## just return RET_OK and not provide any additional feedback through the callback.
|
||||
if res.isErr():
|
||||
foreignThreadGc:
|
||||
let msg = "libwaku error: " & $res.error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
when T is string:
|
||||
let msg = $res.get()
|
||||
if msg.len > 0:
|
||||
foreignThreadGc:
|
||||
callback(RET_OK, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_OK
|
||||
|
||||
proc relayEventCallback(ctx: ptr WakuContext): WakuRelayHandler =
|
||||
return proc(
|
||||
pubsubTopic: PubsubTopic, msg: WakuMessage
|
||||
@ -148,13 +167,7 @@ proc waku_destroy(
|
||||
): cint {.dynlib, exportc.} =
|
||||
checkLibwakuParams(ctx, callback, userData)
|
||||
|
||||
waku_thread.stopWakuThread(ctx).isOkOr:
|
||||
foreignThreadGc:
|
||||
let msg = $error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
return RET_OK
|
||||
waku_thread.stopWakuThread(ctx).handleRes(callback, userData)
|
||||
|
||||
proc waku_version(
|
||||
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||
@ -270,6 +283,8 @@ proc waku_relay_publish(
|
||||
return RET_ERR
|
||||
|
||||
let pst = pubSubTopic.alloc()
|
||||
defer:
|
||||
deallocShared(pst)
|
||||
|
||||
let targetPubSubTopic =
|
||||
if len(pst) == 0:
|
||||
@ -277,7 +292,8 @@ proc waku_relay_publish(
|
||||
else:
|
||||
$pst
|
||||
|
||||
let sendReqRes = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx,
|
||||
RequestType.RELAY,
|
||||
RelayRequest.createShared(
|
||||
@ -287,16 +303,7 @@ proc waku_relay_publish(
|
||||
wakuMessage,
|
||||
),
|
||||
)
|
||||
deallocShared(pst)
|
||||
|
||||
if sendReqRes.isErr():
|
||||
let msg = $sendReqRes.error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
let msgHash = $sendReqRes.value
|
||||
callback(RET_OK, unsafeAddr msgHash[0], cast[csize_t](len(msgHash)), userData)
|
||||
return RET_OK
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_start(
|
||||
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||
@ -330,22 +337,19 @@ proc waku_relay_subscribe(
|
||||
checkLibwakuParams(ctx, callback, userData)
|
||||
|
||||
let pst = pubSubTopic.alloc()
|
||||
defer:
|
||||
deallocShared(pst)
|
||||
var cb = relayEventCallback(ctx)
|
||||
let sendReqRes = waku_thread.sendRequestToWakuThread(
|
||||
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx,
|
||||
RequestType.RELAY,
|
||||
RelayRequest.createShared(
|
||||
RelayMsgType.SUBSCRIBE, PubsubTopic($pst), WakuRelayHandler(cb)
|
||||
),
|
||||
)
|
||||
deallocShared(pst)
|
||||
|
||||
if sendReqRes.isErr():
|
||||
let msg = $sendReqRes.error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
return RET_OK
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_relay_unsubscribe(
|
||||
ctx: ptr WakuContext,
|
||||
@ -356,8 +360,11 @@ proc waku_relay_unsubscribe(
|
||||
checkLibwakuParams(ctx, callback, userData)
|
||||
|
||||
let pst = pubSubTopic.alloc()
|
||||
defer:
|
||||
deallocShared(pst)
|
||||
|
||||
let sendReqRes = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx,
|
||||
RequestType.RELAY,
|
||||
RelayRequest.createShared(
|
||||
@ -366,14 +373,7 @@ proc waku_relay_unsubscribe(
|
||||
WakuRelayHandler(relayEventCallback(ctx)),
|
||||
),
|
||||
)
|
||||
deallocShared(pst)
|
||||
|
||||
if sendReqRes.isErr():
|
||||
let msg = $sendReqRes.error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
return RET_OK
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_relay_get_num_connected_peers(
|
||||
ctx: ptr WakuContext,
|
||||
@ -387,25 +387,13 @@ proc waku_relay_get_num_connected_peers(
|
||||
defer:
|
||||
deallocShared(pst)
|
||||
|
||||
let numConnPeersRes = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx,
|
||||
RequestType.RELAY,
|
||||
RelayRequest.createShared(RelayMsgType.LIST_CONNECTED_PEERS, PubsubTopic($pst)),
|
||||
)
|
||||
|
||||
if numConnPeersRes.isErr():
|
||||
foreignThreadGc:
|
||||
let msg = "Error in waku_relay_get_num_connected_peers: " & $numConnPeersRes.error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
let numConnPeers = numConnPeersRes.get()
|
||||
foreignThreadGc:
|
||||
callback(
|
||||
RET_OK, unsafeAddr numConnPeers[0], cast[csize_t](len(numConnPeers)), userData
|
||||
)
|
||||
|
||||
return RET_OK
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_relay_get_num_peers_in_mesh(
|
||||
ctx: ptr WakuContext,
|
||||
@ -419,25 +407,13 @@ proc waku_relay_get_num_peers_in_mesh(
|
||||
defer:
|
||||
deallocShared(pst)
|
||||
|
||||
let numPeersInMeshRes = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx,
|
||||
RequestType.RELAY,
|
||||
RelayRequest.createShared(RelayMsgType.LIST_MESH_PEERS, PubsubTopic($pst)),
|
||||
)
|
||||
|
||||
if numPeersInMeshRes.isErr():
|
||||
foreignThreadGc:
|
||||
let msg = "Error in waku_relay_get_num_peers_in_mesh: " & $numPeersInMeshRes.error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
let numPeersInMesh = numPeersInMeshRes.get()
|
||||
foreignThreadGc:
|
||||
callback(
|
||||
RET_OK, unsafeAddr numPeersInMesh[0], cast[csize_t](len(numPeersInMesh)), userData
|
||||
)
|
||||
|
||||
return RET_OK
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_lightpush_publish(
|
||||
ctx: ptr WakuContext,
|
||||
@ -474,22 +450,15 @@ proc waku_lightpush_publish(
|
||||
else:
|
||||
$pst
|
||||
|
||||
let sendReqRes = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx,
|
||||
RequestType.LIGHTPUSH,
|
||||
LightpushRequest.createShared(
|
||||
LightpushMsgType.PUBLISH, PubsubTopic($pst), wakuMessage
|
||||
),
|
||||
)
|
||||
|
||||
if sendReqRes.isErr():
|
||||
let msg = $sendReqRes.error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
let msg = $sendReqRes.value
|
||||
callback(RET_OK, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_OK
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_connect(
|
||||
ctx: ptr WakuContext,
|
||||
@ -500,19 +469,15 @@ proc waku_connect(
|
||||
): cint {.dynlib, exportc.} =
|
||||
checkLibwakuParams(ctx, callback, userData)
|
||||
|
||||
let connRes = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx,
|
||||
RequestType.PEER_MANAGER,
|
||||
PeerManagementRequest.createShared(
|
||||
PeerManagementMsgType.CONNECT_TO, $peerMultiAddr, chronos.milliseconds(timeoutMs)
|
||||
),
|
||||
)
|
||||
if connRes.isErr():
|
||||
let msg = $connRes.error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
return RET_OK
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_get_peerids_from_peerstore(
|
||||
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||
@ -564,39 +529,26 @@ proc waku_store_query(
|
||||
): cint {.dynlib, exportc.} =
|
||||
checkLibwakuParams(ctx, callback, userData)
|
||||
|
||||
let sendReqRes = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx,
|
||||
RequestType.STORE,
|
||||
JsonStoreQueryRequest.createShared(jsonQuery, peerAddr, timeoutMs),
|
||||
)
|
||||
|
||||
if sendReqRes.isErr():
|
||||
let msg = $sendReqRes.error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
let msg = $sendReqRes.value
|
||||
callback(RET_OK, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_OK
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_listen_addresses(
|
||||
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||
): cint {.dynlib, exportc.} =
|
||||
checkLibwakuParams(ctx, callback, userData)
|
||||
|
||||
let connRes = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx,
|
||||
RequestType.DEBUG,
|
||||
DebugNodeRequest.createShared(DebugNodeMsgType.RETRIEVE_LISTENING_ADDRESSES),
|
||||
)
|
||||
if connRes.isErr():
|
||||
let msg = $connRes.error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
else:
|
||||
let msg = $connRes.value
|
||||
callback(RET_OK, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_OK
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_dns_discovery(
|
||||
ctx: ptr WakuContext,
|
||||
@ -608,20 +560,15 @@ proc waku_dns_discovery(
|
||||
): cint {.dynlib, exportc.} =
|
||||
checkLibwakuParams(ctx, callback, userData)
|
||||
|
||||
let bootstrapPeers = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx,
|
||||
RequestType.DISCOVERY,
|
||||
DiscoveryRequest.createRetrieveBootstrapNodesRequest(
|
||||
DiscoveryMsgType.GET_BOOTSTRAP_NODES, entTreeUrl, nameDnsServer, timeoutMs
|
||||
),
|
||||
).valueOr:
|
||||
let msg = $error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
let msg = $bootstrapPeers
|
||||
callback(RET_OK, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_OK
|
||||
)
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_discv5_update_bootnodes(
|
||||
ctx: ptr WakuContext, bootnodes: cstring, callback: WakuCallBack, userData: pointer
|
||||
@ -630,73 +577,50 @@ proc waku_discv5_update_bootnodes(
|
||||
## bootnodes - JSON array containing the bootnode ENRs i.e. `["enr:...", "enr:..."]`
|
||||
checkLibwakuParams(ctx, callback, userData)
|
||||
|
||||
let resp = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx,
|
||||
RequestType.DISCOVERY,
|
||||
DiscoveryRequest.createUpdateBootstrapNodesRequest(
|
||||
DiscoveryMsgType.UPDATE_DISCV5_BOOTSTRAP_NODES, bootnodes
|
||||
),
|
||||
).valueOr:
|
||||
let msg = $error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
let msg = $resp
|
||||
callback(RET_OK, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_OK
|
||||
)
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_get_my_enr(
|
||||
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||
): cint {.dynlib, exportc.} =
|
||||
checkLibwakuParams(ctx, callback, userData)
|
||||
|
||||
let connRes = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx,
|
||||
RequestType.DEBUG,
|
||||
DebugNodeRequest.createShared(DebugNodeMsgType.RETRIEVE_MY_ENR),
|
||||
)
|
||||
if connRes.isErr():
|
||||
let msg = $connRes.error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
else:
|
||||
let msg = $connRes.value
|
||||
callback(RET_OK, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_OK
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_start_discv5(
|
||||
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||
): cint {.dynlib, exportc.} =
|
||||
checkLibwakuParams(ctx, callback, userData)
|
||||
|
||||
let resp = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx, RequestType.DISCOVERY, DiscoveryRequest.createDiscV5StartRequest()
|
||||
).valueOr:
|
||||
let msg = $error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
let msg = $resp
|
||||
callback(RET_OK, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
|
||||
return RET_OK
|
||||
)
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_stop_discv5(
|
||||
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||
): cint {.dynlib, exportc.} =
|
||||
checkLibwakuParams(ctx, callback, userData)
|
||||
|
||||
let resp = waku_thread.sendRequestToWakuThread(
|
||||
waku_thread
|
||||
.sendRequestToWakuThread(
|
||||
ctx, RequestType.DISCOVERY, DiscoveryRequest.createDiscV5StopRequest()
|
||||
).valueOr:
|
||||
let msg = $error
|
||||
callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
return RET_ERR
|
||||
|
||||
let msg = $resp
|
||||
callback(RET_OK, unsafeAddr msg[0], cast[csize_t](len(msg)), userData)
|
||||
|
||||
return RET_OK
|
||||
)
|
||||
.handleRes(callback, userData)
|
||||
|
||||
proc waku_peer_exchange_request(
|
||||
ctx: ptr WakuContext, numPeers: uint64, callback: WakuCallBack, userData: pointer
|
||||
|
Loading…
x
Reference in New Issue
Block a user