kubo/bitswap/message/message.go
Brian Tiger Chow 0d3b0f1062 fix(bs:msg) remove swarm.Message
no longer exists. instead, use net message
2014-09-22 04:05:15 -07:00

82 lines
1.6 KiB
Go

package message
import (
"errors"
netmsg "github.com/jbenet/go-ipfs/net/message"
blocks "github.com/jbenet/go-ipfs/blocks"
nm "github.com/jbenet/go-ipfs/net/message"
peer "github.com/jbenet/go-ipfs/peer"
u "github.com/jbenet/go-ipfs/util"
)
type BitSwapMessage interface {
Wantlist() []u.Key
Blocks() []blocks.Block
AppendWanted(k u.Key)
AppendBlock(b *blocks.Block)
Exportable
}
type Exportable interface {
ToProto() *PBMessage
ToNet(p *peer.Peer) (nm.NetMessage, error)
}
// message wraps a proto message for convenience
type message struct {
pb PBMessage
}
func newMessageFromProto(pb PBMessage) *message {
return &message{pb: pb}
}
func New() *message {
return new(message)
}
// TODO(brian): convert these into keys
func (m *message) Wantlist() []u.Key {
wl := make([]u.Key, len(m.pb.Wantlist))
for _, str := range m.pb.Wantlist {
wl = append(wl, u.Key(str))
}
return wl
}
// TODO(brian): convert these into blocks
func (m *message) Blocks() []blocks.Block {
bs := make([]blocks.Block, len(m.pb.Blocks))
for _, data := range m.pb.Blocks {
b, err := blocks.NewBlock(data)
if err != nil {
continue
}
bs = append(bs, *b)
}
return bs
}
func (m *message) AppendWanted(k u.Key) {
m.pb.Wantlist = append(m.pb.Wantlist, string(k))
}
func (m *message) AppendBlock(b *blocks.Block) {
m.pb.Blocks = append(m.pb.Blocks, b.Data)
}
func FromNet(nmsg netmsg.NetMessage) (BitSwapMessage, error) {
return nil, errors.New("TODO implement")
}
func (m *message) ToProto() *PBMessage {
cp := m.pb
return &cp
}
func (m *message) ToNet(p *peer.Peer) (nm.NetMessage, error) {
return nm.FromObject(p, m.ToProto())
}