2024-06-28 16:04:57 +05:30
|
|
|
{.push raises: [].}
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2024-03-16 00:08:47 +01:00
|
|
|
import std/options
|
|
|
|
|
import ../common/protobuf, ../waku_core, ./rpc
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2024-04-20 09:10:52 +05:30
|
|
|
const DefaultMaxRpcSize* = -1
|
2022-10-25 14:55:31 +02:00
|
|
|
|
2025-03-05 12:07:56 +01:00
|
|
|
proc encode*(rpc: LightpushRequest): ProtoBuffer =
|
2022-11-07 16:24:16 +01:00
|
|
|
var pb = initProtoBuffer()
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2025-03-05 12:07:56 +01:00
|
|
|
pb.write3(1, rpc.requestId)
|
|
|
|
|
pb.write3(20, rpc.pubSubTopic)
|
|
|
|
|
pb.write3(21, rpc.message.encode())
|
2022-11-07 16:24:16 +01:00
|
|
|
pb.finish3()
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2025-03-05 12:07:56 +01:00
|
|
|
return pb
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2025-03-05 12:07:56 +01:00
|
|
|
proc decode*(T: type LightpushRequest, buffer: seq[byte]): ProtobufResult[T] =
|
2022-11-07 16:24:16 +01:00
|
|
|
let pb = initProtoBuffer(buffer)
|
2025-03-05 12:07:56 +01:00
|
|
|
var rpc = LightpushRequest()
|
|
|
|
|
|
|
|
|
|
var requestId: string
|
|
|
|
|
if not ?pb.getField(1, requestId):
|
|
|
|
|
return err(ProtobufError.missingRequiredField("request_id"))
|
|
|
|
|
else:
|
|
|
|
|
rpc.requestId = requestId
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2022-11-09 09:55:47 +01:00
|
|
|
var pubSubTopic: PubsubTopic
|
2025-03-05 12:07:56 +01:00
|
|
|
if not ?pb.getField(20, pubSubTopic):
|
|
|
|
|
rpc.pubSubTopic = none(PubsubTopic)
|
2022-11-18 20:01:01 +01:00
|
|
|
else:
|
2025-03-05 12:07:56 +01:00
|
|
|
rpc.pubSubTopic = some(pubSubTopic)
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2022-11-18 20:01:01 +01:00
|
|
|
var messageBuf: seq[byte]
|
2025-03-05 12:07:56 +01:00
|
|
|
if not ?pb.getField(21, messageBuf):
|
2023-02-20 15:03:32 +01:00
|
|
|
return err(ProtobufError.missingRequiredField("message"))
|
2022-11-18 20:01:01 +01:00
|
|
|
else:
|
|
|
|
|
rpc.message = ?WakuMessage.decode(messageBuf)
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2025-03-05 12:07:56 +01:00
|
|
|
return ok(rpc)
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2025-03-05 12:07:56 +01:00
|
|
|
proc encode*(rpc: LightPushResponse): ProtoBuffer =
|
2022-11-07 16:24:16 +01:00
|
|
|
var pb = initProtoBuffer()
|
2023-02-20 15:03:32 +01:00
|
|
|
|
2022-11-07 16:24:16 +01:00
|
|
|
pb.write3(1, rpc.requestId)
|
2025-07-10 10:56:02 +10:00
|
|
|
pb.write3(10, rpc.statusCode.uint32)
|
2025-03-05 12:07:56 +01:00
|
|
|
pb.write3(11, rpc.statusDesc)
|
|
|
|
|
pb.write3(12, rpc.relayPeerCount)
|
2022-11-07 16:24:16 +01:00
|
|
|
pb.finish3()
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2025-03-05 12:07:56 +01:00
|
|
|
return pb
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2025-03-05 12:07:56 +01:00
|
|
|
proc decode*(T: type LightPushResponse, buffer: seq[byte]): ProtobufResult[T] =
|
2022-08-03 01:47:42 +02:00
|
|
|
let pb = initProtoBuffer(buffer)
|
2025-03-05 12:07:56 +01:00
|
|
|
var rpc = LightPushResponse()
|
2022-08-03 01:47:42 +02:00
|
|
|
|
|
|
|
|
var requestId: string
|
2022-11-18 20:01:01 +01:00
|
|
|
if not ?pb.getField(1, requestId):
|
2023-02-20 15:03:32 +01:00
|
|
|
return err(ProtobufError.missingRequiredField("request_id"))
|
2022-11-18 20:01:01 +01:00
|
|
|
else:
|
|
|
|
|
rpc.requestId = requestId
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2025-03-05 12:07:56 +01:00
|
|
|
var statusCode: uint32
|
|
|
|
|
if not ?pb.getField(10, statusCode):
|
|
|
|
|
return err(ProtobufError.missingRequiredField("status_code"))
|
|
|
|
|
else:
|
2025-07-10 10:56:02 +10:00
|
|
|
rpc.statusCode = statusCode.LightPushStatusCode
|
2025-03-05 12:07:56 +01:00
|
|
|
|
|
|
|
|
var statusDesc: string
|
|
|
|
|
if not ?pb.getField(11, statusDesc):
|
|
|
|
|
rpc.statusDesc = none(string)
|
2022-11-18 20:01:01 +01:00
|
|
|
else:
|
2025-03-05 12:07:56 +01:00
|
|
|
rpc.statusDesc = some(statusDesc)
|
2022-11-18 20:01:01 +01:00
|
|
|
|
2025-03-05 12:07:56 +01:00
|
|
|
var relayPeerCount: uint32
|
|
|
|
|
if not ?pb.getField(12, relayPeerCount):
|
|
|
|
|
rpc.relayPeerCount = none(uint32)
|
2022-11-18 20:01:01 +01:00
|
|
|
else:
|
2025-03-05 12:07:56 +01:00
|
|
|
rpc.relayPeerCount = some(relayPeerCount)
|
2022-08-03 01:47:42 +02:00
|
|
|
|
2025-03-05 12:07:56 +01:00
|
|
|
return ok(rpc)
|