Procs
func wrapServerHandler(methName: string; params, procBody, procWrapper, formatType: NimNode): NimNode {. ...raises: [], gcsafe, tags: [], forbids: [].}
-
This proc generate something like this:
proc rpcHandler(paramA: ParamAType, paramB: ParamBType): FutureReturnType = procBody return retVal
proc rpcWrapper(params: RequestParamsRx): FutureJsonString = type RpcType = object paramA: ParamAType paramB: ParamBType
var rpcVar: RpcType
if params.isPositional: if params.positional.len < expectedLen: raise exception rpcVar.paramA = params.unpack(paramA of ParamAType) rpcVar.paramB = params.unpack(paramB of ParamBType) else: # missing parameters is ok in named mode # the default value will be used for x in params.named: case x.name of "paramA": rpcVar.paramA = params.unpack(paramA of ParamAType) of "paramB": rpcVar.paramB = params.unpack(paramB of ParamBType) else: discard
let res = await rpcHandler(rpcVar.paramA, rpcVar.paramB) return JrpcConv.encode(res).JsonString
Source Edit
Templates
template maybeWrapServerResult(Format, resFut): auto {..}
- Don't encode e.g. JsonString, return as is Source Edit
Exports
-
flavorEnumRep, automaticPrimitivesSerialization, Reader, decode, flavorUsesAutomaticObjectSerialization, flavorEnumRep, typeAutoSerialize, typeClassOrMemberAutoSerialize, flavorRequiresAllFields, Writer, mimeType, flavorOmitsOptionalFields, automaticSerialization, automaticBuiltinSerialization, flavorSkipNullFields, flavorAllowsUnknownFields, PreferredOutputType, JrpcConv