Skip to content

Commit 8794146

Browse files
authored
Merge pull request #67 from ipfs/feat/ipld-in-ipfs
Use IPLD-prime: target merge branch
2 parents cbf224c + ed0a87b commit 8794146

9 files changed

+543
-140
lines changed

coding.go

+78-30
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ import (
66
"strings"
77

88
blocks "github.com/ipfs/go-block-format"
9-
pb "github.com/ipfs/go-merkledag/pb"
10-
119
cid "github.com/ipfs/go-cid"
12-
ipld "github.com/ipfs/go-ipld-format"
10+
format "github.com/ipfs/go-ipld-format"
11+
pb "github.com/ipfs/go-merkledag/pb"
12+
dagpb "github.com/ipld/go-codec-dagpb"
13+
ipld "github.com/ipld/go-ipld-prime"
14+
"github.com/ipld/go-ipld-prime/fluent/qp"
15+
cidlink "github.com/ipld/go-ipld-prime/linking/cid"
1316
)
1417

1518
// Make sure the user doesn't upgrade this file.
@@ -22,38 +25,84 @@ const _ = pb.DoNotUpgradeFileEverItWillChangeYourHashes
2225

2326
// unmarshal decodes raw data into a *Node instance.
2427
// The conversion uses an intermediate PBNode.
25-
func (n *ProtoNode) unmarshal(encoded []byte) error {
26-
var pbn pb.PBNode
27-
if err := pbn.Unmarshal(encoded); err != nil {
28-
return fmt.Errorf("unmarshal failed. %v", err)
28+
func unmarshal(encodedBytes []byte) (*ProtoNode, error) {
29+
nb := dagpb.Type.PBNode.NewBuilder()
30+
if err := dagpb.DecodeBytes(nb, encodedBytes); err != nil {
31+
return nil, err
2932
}
33+
nd := nb.Build()
34+
return fromImmutableNode(&immutableProtoNode{encodedBytes, nd.(dagpb.PBNode)}), nil
35+
}
3036

31-
pbnl := pbn.GetLinks()
32-
n.links = make([]*ipld.Link, len(pbnl))
33-
for i, l := range pbnl {
34-
n.links[i] = &ipld.Link{Name: l.GetName(), Size: l.GetTsize()}
35-
c, err := cid.Cast(l.GetHash())
36-
if err != nil {
37-
return fmt.Errorf("link hash #%d is not valid multihash. %v", i, err)
37+
func fromImmutableNode(encoded *immutableProtoNode) *ProtoNode {
38+
n := new(ProtoNode)
39+
n.encoded = encoded
40+
if n.encoded.PBNode.Data.Exists() {
41+
n.data = n.encoded.PBNode.Data.Must().Bytes()
42+
}
43+
numLinks := n.encoded.PBNode.Links.Length()
44+
n.links = make([]*format.Link, numLinks)
45+
linkAllocs := make([]format.Link, numLinks)
46+
for i := int64(0); i < numLinks; i++ {
47+
next := n.encoded.PBNode.Links.Lookup(i)
48+
name := ""
49+
if next.FieldName().Exists() {
50+
name = next.FieldName().Must().String()
3851
}
39-
n.links[i].Cid = c
52+
c := cid.Undef
53+
c = next.FieldHash().Link().(cidlink.Link).Cid
54+
size := uint64(0)
55+
if next.FieldTsize().Exists() {
56+
size = uint64(next.FieldTsize().Must().Int())
57+
}
58+
link := &linkAllocs[i]
59+
link.Name = name
60+
link.Size = size
61+
link.Cid = c
62+
n.links[i] = link
63+
}
64+
return n
65+
}
66+
func (n *ProtoNode) marshalImmutable() (*immutableProtoNode, error) {
67+
nd, err := qp.BuildMap(dagpb.Type.PBNode, 2, func(ma ipld.MapAssembler) {
68+
qp.MapEntry(ma, "Links", qp.List(int64(len(n.links)), func(la ipld.ListAssembler) {
69+
for _, link := range n.links {
70+
qp.ListEntry(la, qp.Map(3, func(ma ipld.MapAssembler) {
71+
if link.Cid.Defined() {
72+
qp.MapEntry(ma, "Hash", qp.Link(cidlink.Link{Cid: link.Cid}))
73+
}
74+
qp.MapEntry(ma, "Name", qp.String(link.Name))
75+
qp.MapEntry(ma, "Tsize", qp.Int(int64(link.Size)))
76+
}))
77+
}
78+
}))
79+
if n.data != nil {
80+
qp.MapEntry(ma, "Data", qp.Bytes(n.data))
81+
}
82+
})
83+
if err != nil {
84+
return nil, err
4085
}
41-
sort.Stable(LinkSlice(n.links)) // keep links sorted
4286

43-
n.data = pbn.GetData()
44-
n.encoded = encoded
45-
return nil
87+
// 1KiB can be allocated on the stack, and covers most small nodes
88+
// without having to grow the buffer and cause allocations.
89+
enc := make([]byte, 0, 1024)
90+
91+
enc, err = dagpb.AppendEncode(enc, nd)
92+
if err != nil {
93+
return nil, err
94+
}
95+
return &immutableProtoNode{enc, nd.(dagpb.PBNode)}, nil
4696
}
4797

4898
// Marshal encodes a *Node instance into a new byte slice.
4999
// The conversion uses an intermediate PBNode.
50100
func (n *ProtoNode) Marshal() ([]byte, error) {
51-
pbn := n.GetPBNode()
52-
data, err := pbn.Marshal()
101+
enc, err := n.marshalImmutable()
53102
if err != nil {
54-
return data, fmt.Errorf("marshal failed. %v", err)
103+
return nil, err
55104
}
56-
return data, nil
105+
return enc.encoded, nil
57106
}
58107

59108
// GetPBNode converts *ProtoNode into it's protocol buffer variant.
@@ -88,28 +137,27 @@ func (n *ProtoNode) EncodeProtobuf(force bool) ([]byte, error) {
88137
if n.encoded == nil || force {
89138
n.cached = cid.Undef
90139
var err error
91-
n.encoded, err = n.Marshal()
140+
n.encoded, err = n.marshalImmutable()
92141
if err != nil {
93142
return nil, err
94143
}
95144
}
96145

97146
if !n.cached.Defined() {
98-
c, err := n.CidBuilder().Sum(n.encoded)
147+
c, err := n.CidBuilder().Sum(n.encoded.encoded)
99148
if err != nil {
100149
return nil, err
101150
}
102151

103152
n.cached = c
104153
}
105154

106-
return n.encoded, nil
155+
return n.encoded.encoded, nil
107156
}
108157

109158
// DecodeProtobuf decodes raw data and returns a new Node instance.
110159
func DecodeProtobuf(encoded []byte) (*ProtoNode, error) {
111-
n := new(ProtoNode)
112-
err := n.unmarshal(encoded)
160+
n, err := unmarshal(encoded)
113161
if err != nil {
114162
return nil, fmt.Errorf("incorrectly formatted merkledag node: %s", err)
115163
}
@@ -118,7 +166,7 @@ func DecodeProtobuf(encoded []byte) (*ProtoNode, error) {
118166

119167
// DecodeProtobufBlock is a block decoder for protobuf IPLD nodes conforming to
120168
// node.DecodeBlockFunc
121-
func DecodeProtobufBlock(b blocks.Block) (ipld.Node, error) {
169+
func DecodeProtobufBlock(b blocks.Block) (format.Node, error) {
122170
c := b.Cid()
123171
if c.Type() != cid.DagProtobuf {
124172
return nil, fmt.Errorf("this function can only decode protobuf nodes")
@@ -138,4 +186,4 @@ func DecodeProtobufBlock(b blocks.Block) (ipld.Node, error) {
138186
}
139187

140188
// Type assertion
141-
var _ ipld.DecodeBlockFunc = DecodeProtobufBlock
189+
var _ format.DecodeBlockFunc = DecodeProtobufBlock

coding_test.go

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package merkledag_test
2+
3+
import (
4+
"bytes"
5+
"fmt"
6+
"testing"
7+
8+
cid "github.com/ipfs/go-cid"
9+
ipld "github.com/ipfs/go-ipld-format"
10+
"github.com/ipfs/go-merkledag"
11+
)
12+
13+
var benchInput []byte
14+
15+
func init() {
16+
someData := bytes.Repeat([]byte("some plaintext data\n"), 10)
17+
// make a test CID -- doesn't matter just to add as a link
18+
someCid, _ := cid.Cast([]byte{1, 85, 0, 5, 0, 1, 2, 3, 4})
19+
20+
node := &merkledag.ProtoNode{}
21+
node.SetData(someData)
22+
for i := 0; i < 10; i++ {
23+
node.AddRawLink(fmt.Sprintf("%d", i), &ipld.Link{
24+
Size: 10,
25+
Cid: someCid,
26+
})
27+
}
28+
29+
enc, err := node.EncodeProtobuf(true)
30+
if err != nil {
31+
panic(err)
32+
}
33+
benchInput = enc
34+
}
35+
36+
func BenchmarkRoundtrip(b *testing.B) {
37+
b.ReportAllocs()
38+
b.RunParallel(func(pb *testing.PB) {
39+
for pb.Next() {
40+
node, err := merkledag.DecodeProtobuf(benchInput)
41+
if err != nil {
42+
b.Fatal(err)
43+
}
44+
45+
enc, err := node.EncodeProtobuf(true)
46+
if err != nil {
47+
b.Fatal(err)
48+
}
49+
_ = enc
50+
}
51+
})
52+
}

go.mod

+3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ require (
1111
github.com/ipfs/go-ipfs-util v0.0.2
1212
github.com/ipfs/go-ipld-cbor v0.0.5
1313
github.com/ipfs/go-ipld-format v0.2.0
14+
github.com/ipfs/go-ipld-legacy v0.1.0
15+
github.com/ipld/go-codec-dagpb v1.3.0
16+
github.com/ipld/go-ipld-prime v0.11.0
1417
github.com/multiformats/go-multihash v0.0.15
1518
)
1619

go.sum

+27-7
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ=
7777
github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag=
7878
github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk=
7979
github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY=
80+
github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY=
81+
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
8082
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
8183
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
8284
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
@@ -113,17 +115,20 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W
113115
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
114116
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
115117
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
116-
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
117118
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
119+
github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4=
120+
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
118121
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
119122
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
120123
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
121124
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
122125
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
123126
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
124127
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
125-
github.com/google/go-cmp v0.5.3 h1:x95R7cp+rSeeqAMI2knLtQ0DKlaBhv2NrtrOvafPHRo=
126128
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
129+
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
130+
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
131+
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
127132
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
128133
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
129134
github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM=
@@ -220,6 +225,8 @@ github.com/ipfs/go-ipld-cbor v0.0.5/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9
220225
github.com/ipfs/go-ipld-format v0.0.1/go.mod h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms=
221226
github.com/ipfs/go-ipld-format v0.2.0 h1:xGlJKkArkmBvowr+GMCX0FEZtkro71K1AwiKnL37mwA=
222227
github.com/ipfs/go-ipld-format v0.2.0/go.mod h1:3l3C1uKoadTPbeNfrDi+xMInYKlx2Cvg1BuydPSdzQs=
228+
github.com/ipfs/go-ipld-legacy v0.1.0 h1:wxkkc4k8cnvIGIjPO0waJCe7SHEyFgl+yQdafdjGrpA=
229+
github.com/ipfs/go-ipld-legacy v0.1.0/go.mod h1:86f5P/srAmh9GcIcWQR9lfFLZPrIyyXQeVlOWeeWEuI=
223230
github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM=
224231
github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk=
225232
github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A=
@@ -238,6 +245,11 @@ github.com/ipfs/go-peertaskqueue v0.2.0 h1:2cSr7exUGKYyDeUyQ7P/nHPs9P7Ht/B+ROrpN
238245
github.com/ipfs/go-peertaskqueue v0.2.0/go.mod h1:5/eNrBEbtSKWCG+kQK8K8fGNixoYUnr+P7jivavs9lY=
239246
github.com/ipfs/go-verifcid v0.0.1 h1:m2HI7zIuR5TFyQ1b79Da5N9dnnCP1vcu2QqawmWlK2E=
240247
github.com/ipfs/go-verifcid v0.0.1/go.mod h1:5Hrva5KBeIog4A+UpqlaIU+DEstipcJYQQZc0g37pY0=
248+
github.com/ipld/go-codec-dagpb v1.3.0 h1:czTcaoAuNNyIYWs6Qe01DJ+sEX7B+1Z0LcXjSatMGe8=
249+
github.com/ipld/go-codec-dagpb v1.3.0/go.mod h1:ga4JTU3abYApDC3pZ00BC2RSvC3qfBb9MSJkMLSwnhA=
250+
github.com/ipld/go-ipld-prime v0.9.1-0.20210324083106-dc342a9917db/go.mod h1:KvBLMr4PX1gWptgkzRjVZCrLmSGcZCb/jioOQwCqZN8=
251+
github.com/ipld/go-ipld-prime v0.11.0 h1:jD/b/22R7CSL+F9xNffcexs+wO0Ji/TfwXO/TWck+70=
252+
github.com/ipld/go-ipld-prime v0.11.0/go.mod h1:+WIAkokurHmZ/KwzDOMUuoeJgaRQktHtEaLglS3ZeV8=
241253
github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA=
242254
github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
243255
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
@@ -258,8 +270,9 @@ github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJS
258270
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
259271
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
260272
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
261-
github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE=
262273
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
274+
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
275+
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
263276
github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0=
264277
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
265278
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
@@ -603,8 +616,10 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
603616
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
604617
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
605618
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
606-
github.com/polydawn/refmt v0.0.0-20190221155625-df39d6c2d992 h1:bzMe+2coZJYHnhGgVlcQKuRy4FSny4ds8dLQjw5P1XE=
607619
github.com/polydawn/refmt v0.0.0-20190221155625-df39d6c2d992/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o=
620+
github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o=
621+
github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e h1:ZOcivgkkFRnjfoTcGsDq3UQYiBmekwLA+qg0OjyB/ls=
622+
github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o=
608623
github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
609624
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
610625
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
@@ -638,8 +653,9 @@ github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5k
638653
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
639654
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
640655
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
641-
github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa h1:E+gaaifzi2xF65PbDmuKI3PhLWY6G5opMLniFq8vmXA=
642656
github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa/go.mod h1:2RVY1rIf+2J2o/IM9+vPq9RzmHDSseB7FoXiSNIUsoU=
657+
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
658+
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
643659
github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY=
644660
github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE=
645661
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA=
@@ -669,8 +685,9 @@ github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cb
669685
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
670686
github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU=
671687
github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM=
672-
github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436 h1:qOpVTI+BrstcjTZLm2Yz/3sOnqkzj3FQoh0g+E5s3Gc=
673688
github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
689+
github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a h1:G++j5e0OC488te356JvdhaM8YS6nMsjLAYF7JxCv07w=
690+
github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
674691
github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158 h1:WXhVOwj2USAXB5oMDwRl3piOux2XMV9TANaYxXHdkoE=
675692
github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI=
676693
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc=
@@ -840,6 +857,7 @@ golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGm
840857
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
841858
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
842859
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
860+
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
843861
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
844862
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
845863
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
@@ -893,8 +911,10 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
893911
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
894912
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
895913
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
896-
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
897914
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
915+
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
916+
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
917+
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
898918
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
899919
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
900920
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

0 commit comments

Comments
 (0)