Create bufDagReader
License: MIT Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
Jakub Sztandera committed
Nov 21, 2016 at 17:49 UTC
1817d10cfd9dd660b73ba039528db6f73561f61b
3 files changed
+44
-3
unixfs/io/bufdagreader.go
new
+41
@@ -0,0 +1,41 @@
1
+package io
2
+
3
+import (
4
+ "bytes"
5
+ "context"
6
+ "io"
7
+)
8
+
9
+type bufDagReader struct {
10
+ *bytes.Reader
11
+}
12
+
13
+func NewBufDagReader(b []byte) *bufDagReader {
14
+ return &bufDagReader{bytes.NewReader(b)}
15
+}
16
+
17
+var _ DagReader = (*bufDagReader)(nil)
18
+
19
+func (*bufDagReader) Close() error {
20
+ return nil
21
+}
22
+
23
+func (rd *bufDagReader) CtxReadFull(ctx context.Context, b []byte) (int, error) {
24
+ return rd.Read(b)
25
+}
26
+
27
+func (rd *bufDagReader) Offset() int64 {
28
+ of, err := rd.Seek(0, io.SeekCurrent)
29
+ if err != nil {
30
+ panic("this should never happen " + err.Error())
31
+ }
32
+ return of
33
+}
34
+
35
+func (rd *bufDagReader) Size() uint64 {
36
+ s := rd.Reader.Size()
37
+ if s < 0 {
38
+ panic("size smaller than 0 (impossible!!)")
39
+ }
40
+ return uint64(s)
41
+}
unixfs/io/dagreader.go
+1
-3
@@ -37,9 +37,7 @@ type ReadSeekCloser interface {
37
func NewDagReader(ctx context.Context, n node.Node, serv mdag.DAGService) (DagReader, error) {
38
switch n := n.(type) {
39
case *mdag.RawNode:
40
- return &pbDagReader{
41
- buf: NewRSNCFromBytes(n.RawData()),
42
- }, nil
40
+ return NewBufDagReader(n.RawData()), nil
41
case *mdag.ProtoNode:
42
pb := new(ftpb.Data)
43
if err := proto.Unmarshal(n.Data(), pb); err != nil {
unixfs/io/pbdagreader.go
+2
@@ -45,6 +45,8 @@ type pbDagReader struct {
45
cancel func()
46
}
47
48
+var _ DagReader = (*pbDagReader)(nil)
49
+
50
func NewPBFileReader(ctx context.Context, n *mdag.ProtoNode, pb *ftpb.Data, serv mdag.DAGService) *pbDagReader {
51
fctx, cancel := context.WithCancel(ctx)
52
promises := mdag.GetDAG(fctx, serv, n)