2025-02-05 16:06:04 +01:00
|
|
|
import pkg/stew/byteutils
|
|
|
|
|
import pkg/stew/endians2
|
|
|
|
|
import pkg/questionable
|
|
|
|
|
import pkg/questionable/results
|
2025-02-07 14:51:03 +01:00
|
|
|
import pkg/codexdht
|
2025-02-07 16:19:26 +01:00
|
|
|
import pkg/chronos
|
|
|
|
|
import pkg/libp2p
|
2025-02-05 16:06:04 +01:00
|
|
|
|
|
|
|
|
type NodeEntry* = object
|
2025-02-07 14:51:03 +01:00
|
|
|
id*: NodeId
|
2025-02-07 16:19:26 +01:00
|
|
|
lastVisit*: uint64
|
2025-02-05 16:06:04 +01:00
|
|
|
|
|
|
|
|
proc `$`*(entry: NodeEntry): string =
|
2025-02-07 16:19:26 +01:00
|
|
|
$entry.id & ":" & $entry.lastVisit
|
|
|
|
|
|
|
|
|
|
proc toBytes*(entry: NodeEntry): seq[byte] =
|
|
|
|
|
var buffer = initProtoBuffer()
|
|
|
|
|
buffer.write(1, $entry.id)
|
|
|
|
|
buffer.write(2, entry.lastVisit)
|
|
|
|
|
buffer.finish()
|
|
|
|
|
return buffer.buffer
|
|
|
|
|
|
|
|
|
|
proc fromBytes*(_: type NodeEntry, data: openArray[byte]): ?!NodeEntry =
|
|
|
|
|
var
|
|
|
|
|
buffer = initProtoBuffer(data)
|
|
|
|
|
idStr: string
|
|
|
|
|
lastVisit: uint64
|
|
|
|
|
|
|
|
|
|
if buffer.getField(1, idStr).isErr:
|
|
|
|
|
return failure("Unable to decode `idStr`")
|
|
|
|
|
|
|
|
|
|
if buffer.getField(2, lastVisit).isErr:
|
|
|
|
|
return failure("Unable to decode `lastVisit`")
|
|
|
|
|
|
|
|
|
|
return success(NodeEntry(id: UInt256.fromHex(idStr), lastVisit: lastVisit))
|