@cryptotaxi247 / kubo / commits / 0953295ce

dag: add dag-pb support to put

License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>

Łukasz Magiera committed Aug 12, 2017 at 01:14 UTC 0953295ce4ac85a785394cb33a7eeec000f6aa1d
2 files changed +72
core/coredag/dagpb.go new
+66
@@ -0,0 +1,66 @@
1 +package coredag
2 +
3 +import (
4 + "io"
5 + "io/ioutil"
6 + "math"
7 +
8 + "github.com/ipfs/go-ipfs/merkledag"
9 +
10 + cid "gx/ipfs/QmTprEaAA2A9bst5XH7exuyi5KzNMK3SEDNN8rBDnKWcUS/go-cid"
11 + mh "gx/ipfs/QmU9a9NV9RdPNwZQDYd5uKsm6N6LJLSvLbywDDYFbaaC6P/go-multihash"
12 + node "gx/ipfs/QmYNyRZJBUYPNrLszFmrBrPJbsBh2vMsefz5gnDpB5M1P6/go-ipld-format"
13 +)
14 +
15 +func dagpbJSONParser(r io.Reader, mhType uint64, mhLen int) ([]node.Node, error) {
16 + data, err := ioutil.ReadAll(r)
17 + if err != nil {
18 + return nil, err
19 + }
20 +
21 + nd := &merkledag.ProtoNode{}
22 +
23 + err = nd.UnmarshalJSON(data)
24 + if err != nil {
25 + return nil, err
26 + }
27 +
28 + nd.SetPrefix(cidPrefix(mhType, mhLen))
29 +
30 + return []node.Node{nd}, nil
31 +}
32 +
33 +func dagpbRawParser(r io.Reader, mhType uint64, mhLen int) ([]node.Node, error) {
34 + data, err := ioutil.ReadAll(r)
35 + if err != nil {
36 + return nil, err
37 + }
38 +
39 + nd, err := merkledag.DecodeProtobuf(data)
40 + if err != nil {
41 + return nil, err
42 + }
43 +
44 + nd.SetPrefix(cidPrefix(mhType, mhLen))
45 +
46 + return []node.Node{nd}, nil
47 +}
48 +
49 +func cidPrefix(mhType uint64, mhLen int) *cid.Prefix {
50 + if mhType == math.MaxUint64 {
51 + mhType = mh.SHA2_256
52 + }
53 +
54 + prefix := &cid.Prefix{
55 + MhType: mhType,
56 + MhLength: mhLen,
57 + Version: 1,
58 + Codec: cid.DagProtobuf,
59 + }
60 +
61 + if mhType == mh.SHA2_256 {
62 + prefix.Version = 0
63 + }
64 +
65 + return prefix
66 +}
core/coredag/dagtransl.go
+6
@@ -26,11 +26,17 @@ var DefaultInputEncParsers = InputEncParsers{
26 var defaultJSONParsers = FormatParsers{
27 "cbor": cborJSONParser,
28 "dag-cbor": cborJSONParser,
29 +
30 + "protobuf": dagpbJSONParser,
31 + "dag-pb": dagpbJSONParser,
32 }
33
34 var defaultRawParsers = FormatParsers{
35 "cbor": cborRawParser,
36 "dag-cbor": cborRawParser,
37 +
38 + "protobuf": dagpbRawParser,
39 + "dag-pb": dagpbRawParser,
40 }
41
42 var defaultCborParsers = FormatParsers{