48 lines
1.1 KiB
Nim

import pkg/libp2p/cid
import pkg/libp2p/protobuf/minprotobuf
import pkg/questionable/results
import ./manifest
proc write(pb: var ProtoBuffer, field: int, value: BitTorrentPiece) =
var ipb = initProtoBuffer()
ipb.write(1, value.data.buffer)
ipb.finish()
pb.write(field, ipb)
proc write(pb: var ProtoBuffer, field: int, value: BitTorrentInfo) =
var ipb = initProtoBuffer()
ipb.write(1, value.length)
ipb.write(2, value.pieceLength)
for piece in value.pieces:
ipb.write(3, piece)
if name =? value.name:
ipb.write(4, name)
ipb.finish()
pb.write(field, ipb)
proc encode*(manifest: BitTorrentManifest): seq[byte] =
# ```protobuf
# Message BitTorrentManifest {
# Message Piece {
# bytes data = 1;
# }
#
# Message BitTorrentInfo {
# uint32 length = 1;
# uint32 pieceLength = 2;
# repeated Piece pieces = 3;
# optional string name = 4;
# }
#
# BitTorrentInfo info = 1;
# bytes codexManifestCid = 2;
# ```
var ipb = initProtoBuffer()
ipb.write(1, manifest.info)
ipb.write(2, manifest.codexManifestCid.data.buffer)
ipb.finish()
ipb.buffer