mirror of https://github.com/status-im/nim-eth.git
Make the 'single record inlining' behavior optional
This commit is contained in:
parent
517adbbbca
commit
52b5ca9c9c
|
@ -60,6 +60,7 @@ type
|
|||
version*: int
|
||||
timeouts*: int64
|
||||
useRequestIds*: bool
|
||||
useSingeRecordInlining*: bool
|
||||
rlpxName*: string
|
||||
outgoingRequestDecorator*: NimNode
|
||||
incomingRequestDecorator*: NimNode
|
||||
|
@ -371,7 +372,7 @@ proc newMsg(protocol: P2PProtocol, kind: MessageKind, id: int,
|
|||
chooseFieldType(paramType), # some types such as openarray
|
||||
newEmptyNode()) # are automatically remapped
|
||||
|
||||
if recFields.len == 1:
|
||||
if recFields.len == 1 and protocol.useSingeRecordInlining:
|
||||
# When we have a single parameter, it's treated as the transferred message
|
||||
# type. `recName` will be resolved to the message type that's intended
|
||||
# for serialization while `strongRecName` will be a distinct type over
|
||||
|
@ -536,6 +537,8 @@ proc writeParamsAsRecord*(params: openarray[NimNode],
|
|||
writer, recordWriterCtx,
|
||||
newLit($param), param)
|
||||
|
||||
# TODO: this doesn't respect the `useSingeRecordInlining` option.
|
||||
# Right now, it's not a problem because it's used only in the libp2p back-end
|
||||
if params.len > 1:
|
||||
result = quote do:
|
||||
mixin init, writerType, beginRecord, endRecord
|
||||
|
@ -638,11 +641,11 @@ proc genAwaitUserHandler*(msg: Message, receivedMsg: NimNode,
|
|||
var userHandlerCall = newCall(msg.userHandler.name, leadingParams)
|
||||
|
||||
var params = toSeq(msg.procDef.typedParams(skip = 1))
|
||||
if params.len > 1:
|
||||
if params.len == 1 and msg.protocol.useSingeRecordInlining:
|
||||
userHandlerCall.add receivedMsg
|
||||
else:
|
||||
for p in params:
|
||||
userHandlerCall.add newDotExpr(receivedMsg, p[0])
|
||||
else:
|
||||
userHandlerCall.add receivedMsg
|
||||
|
||||
return newCall("await", userHandlerCall)
|
||||
|
||||
|
|
Loading…
Reference in New Issue