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{