mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-08-11 14:23:12 +00:00
104 lines
2.9 KiB
Nim
104 lines
2.9 KiB
Nim
import
|
|
std/options
|
|
import
|
|
../common/protobuf,
|
|
../waku_core,
|
|
./rpc
|
|
|
|
const DefaultMaxRpcSize* = -1
|
|
|
|
# Codec for EligibilityProof
|
|
|
|
proc encode*(epRpc: EligibilityProof): ProtoBuffer =
|
|
var pb = initProtoBuffer()
|
|
if epRpc.proofOfPayment.isSome():
|
|
let proofOfPayment = epRpc.proofOfPayment.get()
|
|
pb.write3(1, proofOfPayment)
|
|
else:
|
|
# there is no proof
|
|
discard
|
|
pb
|
|
|
|
proc decode*(T: type EligibilityProof, buffer: seq[byte]): ProtobufResult[T] =
|
|
let pb = initProtoBuffer(buffer)
|
|
var epRpc = EligibilityProof()
|
|
var proofOfPayment = newSeq[byte]()
|
|
if not ?pb.getField(1, proofOfPayment):
|
|
epRpc.proofOfPayment = none(seq[byte])
|
|
else:
|
|
epRpc.proofOfPayment = some(proofOfPayment)
|
|
ok(epRpc)
|
|
|
|
# Codec for EligibilityStatus
|
|
|
|
proc encode*(esRpc: EligibilityStatus): ProtoBuffer =
|
|
var pb = initProtoBuffer()
|
|
pb.write3(1, esRpc.statusCode)
|
|
if esRpc.statusDesc.isSome():
|
|
pb.write3(2, esRpc.statusDesc.get())
|
|
pb
|
|
|
|
proc decode*(T: type EligibilityStatus, buffer: seq[byte]): ProtobufResult[T] =
|
|
let pb = initProtoBuffer(buffer)
|
|
var esRpc = EligibilityStatus()
|
|
# status code
|
|
var code = uint32(0)
|
|
if not ?pb.getField(1, code):
|
|
# status code is mandatory
|
|
return err(ProtobufError.missingRequiredField("status_code"))
|
|
else:
|
|
esRpc.statusCode = code
|
|
# status description
|
|
var description = ""
|
|
if not ?pb.getField(2, description):
|
|
esRpc.statusDesc = none(string)
|
|
else:
|
|
esRpc.statusDesc = some(description)
|
|
ok(esRpc)
|
|
|
|
|
|
# Codec for DummyRequest
|
|
|
|
proc encode*(request: DummyRequest): ProtoBuffer =
|
|
var pb = initProtoBuffer()
|
|
pb.write3(1, request.requestId)
|
|
pb.write3(10, request.eligibilityProof.encode())
|
|
pb
|
|
|
|
proc decode*(T: type DummyRequest, buffer: seq[byte]): ProtobufResult[T] =
|
|
let pb = initProtoBuffer(buffer)
|
|
var request = DummyRequest()
|
|
|
|
if not ?pb.getField(1,request.requestId):
|
|
return err(ProtobufError.missingRequiredField("requestId"))
|
|
|
|
var eligibilityProofBytes: seq[byte]
|
|
if not ?pb.getField(10, eligibilityProofBytes):
|
|
return err(ProtobufError.missingRequiredField("eligibilityProof"))
|
|
else:
|
|
request.eligibilityProof = ?EligibilityProof.decode(eligibilityProofBytes)
|
|
ok(request)
|
|
|
|
|
|
# Codec for DummyResponse
|
|
|
|
proc encode*(response: DummyResponse): ProtoBuffer =
|
|
var pb = initProtoBuffer()
|
|
pb.write3(1, response.requestId)
|
|
pb.write3(5, response.eligibilityStatus.encode())
|
|
pb
|
|
|
|
proc decode*(T: type DummyResponse, buffer: seq[byte]): ProtobufResult[T] =
|
|
let pb = initProtoBuffer(buffer)
|
|
var response = DummyResponse()
|
|
|
|
if not ?pb.getField(1,response.requestId):
|
|
return err(ProtobufError.missingRequiredField("requestId"))
|
|
|
|
var eligibilityStatusBytes: seq[byte]
|
|
if not ?pb.getField(5, eligibilityStatusBytes):
|
|
return err(ProtobufError.missingRequiredField("eligibilityStatus"))
|
|
else:
|
|
response.eligibilityStatus = ?EligibilityStatus.decode(eligibilityStatusBytes)
|
|
ok(response)
|