Procs
func wrapServerHandler(methName: string; params, procBody, procWrapper, procPragmas, 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, handlerRes): auto {..}
- Don't encode e.g. JsonString, return as is Source Edit
Exports
-
Reader, typeClassOrMemberAutoSerialize, decode, automaticBuiltinSerialization, automaticPrimitivesSerialization, flavorEnumRep, flavorEnumRep, flavorRequiresAllFields, typeAutoSerialize, flavorOmitsOptionalFields, Writer, flavorSkipNullFields, automaticSerialization, flavorUsesAutomaticObjectSerialization, PreferredOutputType, flavorAllowsUnknownFields, JrpcConv, mimeType