mirror of
https://github.com/codex-storage/nim-codex-dht.git
synced 2025-02-21 08:08:12 +00:00
this is a minimal implementation, with lots of work still needed. Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>
78 lines
1.7 KiB
Nim
78 lines
1.7 KiB
Nim
import
|
|
../discv5/[node],
|
|
libp2p/protobuf/minprotobuf,
|
|
./value_messages
|
|
|
|
func getField(pb: ProtoBuffer, field: int,
|
|
nid: var NodeId): ProtoResult[bool] {.inline.} =
|
|
## Read ``NodeId`` from ProtoBuf's message and validate it
|
|
var buffer: seq[byte]
|
|
let res = ? pb.getField(field, buffer)
|
|
if not(res):
|
|
ok(false)
|
|
else:
|
|
nid = readUintBE[256](buffer)
|
|
ok(true)
|
|
|
|
func write(pb: var ProtoBuffer, field: int, nid: NodeId) =
|
|
## Write NodeId value ``nodeid`` to object ``pb`` using ProtoBuf's encoding.
|
|
write(pb, field, nid.toBytesBE())
|
|
|
|
proc decode*(
|
|
T: typedesc[AddValueMessage],
|
|
buffer: openArray[byte]): Result[AddValueMessage, ProtoError] =
|
|
|
|
let pb = initProtoBuffer(buffer)
|
|
var msg = AddValueMessage()
|
|
|
|
? pb.getRequiredField(1, msg.cId)
|
|
? pb.getRequiredField(2, msg.value)
|
|
|
|
ok(msg)
|
|
|
|
proc encode*(msg: AddValueMessage): seq[byte] =
|
|
var pb = initProtoBuffer()
|
|
|
|
pb.write(1, msg.cId)
|
|
pb.write(2, msg.value)
|
|
|
|
pb.finish()
|
|
pb.buffer
|
|
|
|
proc decode*(
|
|
T: typedesc[GetValueMessage],
|
|
buffer: openArray[byte]): Result[GetValueMessage, ProtoError] =
|
|
|
|
let pb = initProtoBuffer(buffer)
|
|
var msg = GetValueMessage()
|
|
|
|
? pb.getRequiredField(1, msg.cId)
|
|
|
|
ok(msg)
|
|
|
|
proc encode*(msg: GetValueMessage): seq[byte] =
|
|
var pb = initProtoBuffer()
|
|
|
|
pb.write(1, msg.cId)
|
|
|
|
pb.finish()
|
|
pb.buffer
|
|
|
|
proc decode*(
|
|
T: typedesc[ValueMessage],
|
|
buffer: openArray[byte]): Result[ValueMessage, ProtoError] =
|
|
|
|
let pb = initProtoBuffer(buffer)
|
|
var msg = ValueMessage()
|
|
? pb.getRequiredField(1, msg.value)
|
|
|
|
ok(msg)
|
|
|
|
proc encode*(msg: ValueMessage): seq[byte] =
|
|
var pb = initProtoBuffer()
|
|
|
|
pb.write(1, msg.value)
|
|
|
|
pb.finish()
|
|
pb.buffer
|