From 6f9da4ba8a8040c96cde1038cd069c7d68c07d96 Mon Sep 17 00:00:00 2001 From: Zahary Karadjov Date: Tue, 21 Jan 2020 18:49:52 +0200 Subject: [PATCH] Make the RPC procs async again --- json_rpc/router.nim | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/json_rpc/router.nim b/json_rpc/router.nim index dbaca8d..07ada9d 100644 --- a/json_rpc/router.nim +++ b/json_rpc/router.nim @@ -230,36 +230,32 @@ macro rpc*(server: RpcRouter, path: string, body: untyped): untyped = let returnType = parameters[0] # delegate async proc allows return and setting of result as native type - result.add(quote do: - proc `doMain`(`paramsIdent`: JsonNode): `returnType` = + result.add quote do: + proc `doMain`(`paramsIdent`: JsonNode): Future[`returnType`] {.async.} = `setup` `procBody` - ) if returnType == ident"JsonNode": # `JsonNode` results don't need conversion - result.add( quote do: + result.add quote do: proc `procName`(`paramsIdent`: JsonNode): Future[JsonNode] {.async, gcsafe.} = trap(`pathStr`): - `res` = `doMain`(`paramsIdent`) - ) + `res` = await `doMain`(`paramsIdent`) else: - result.add(quote do: + result.add quote do: proc `procName`(`paramsIdent`: JsonNode): Future[JsonNode] {.async, gcsafe.} = trap(`pathStr`): - `res` = %`doMain`(`paramsIdent`) - ) + `res` = %(await `doMain`(`paramsIdent`)) else: # no return types, inline contents - result.add(quote do: + result.add quote do: proc `procName`(`paramsIdent`: JsonNode): Future[JsonNode] {.async, gcsafe.} = `setup` trap(`pathStr`): `procBody` - ) - result.add( quote do: + + result.add quote do: `server`.register(`path`, `procName`) - ) when defined(nimDumpRpcs): echo "\n", pathStr, ": ", result.repr