Skip to content
This repository has been archived by the owner on Aug 9, 2018. It is now read-only.

Commit

Permalink
Force JSON & CBOR to be constructed from io.ReadSeeker
Browse files Browse the repository at this point in the history
  • Loading branch information
mildred committed Feb 17, 2016
1 parent 94650a0 commit ec90690
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 32 deletions.
19 changes: 7 additions & 12 deletions coding/cbor/stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func init() {
}

type CBORDecoder struct {
r io.Reader
r io.ReadSeeker
pos int64
}

Expand All @@ -35,17 +35,12 @@ type cborParser struct {
tagStack []bool
}

func NewCBORDecoder(r io.Reader) (*CBORDecoder, error) {
s := r.(io.Seeker)
if s == nil {
return &CBORDecoder{r, -1}, nil
} else {
offset, err := s.Seek(0, 1)
if err != nil {
return nil, err
}
return &CBORDecoder{r, offset}, nil
func NewCBORDecoder(r io.ReadSeeker) (*CBORDecoder, error) {
offset, err := r.Seek(0, 1)
if err != nil {
return nil, err
}
return &CBORDecoder{r, offset}, nil
}

func (d *CBORDecoder) Read(cb reader.ReadFun) error {
Expand All @@ -54,7 +49,7 @@ func (d *CBORDecoder) Read(cb reader.ReadFun) error {
} else if d.pos == -1 {
d.pos = -2
} else {
newoffset, err := d.r.(io.Seeker).Seek(d.pos, 0)
newoffset, err := d.r.Seek(d.pos, 0)
if err != nil {
return err
} else if newoffset != d.pos {
Expand Down
16 changes: 8 additions & 8 deletions coding/coding.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ const (
HeaderPath = "/mdagv1"
)

var StreamCodecs map[string]func(io.Reader) (stream.NodeReader, error)

type Codec int

const (
Expand All @@ -32,26 +30,28 @@ const (
CodecCBORNoTags
)

var StreamCodecs map[string]func(io.ReadSeeker) (stream.NodeReader, error)

func init() {
Header = mc.Header([]byte(HeaderPath))

StreamCodecs = map[string]func(io.Reader) (stream.NodeReader, error){
json.HeaderPath: func(r io.Reader) (stream.NodeReader, error) {
StreamCodecs = map[string]func(io.ReadSeeker) (stream.NodeReader, error){
json.HeaderPath: func(r io.ReadSeeker) (stream.NodeReader, error) {
return json.NewJSONDecoder(r)
},
cbor.HeaderPath: func(r io.Reader) (stream.NodeReader, error) {
cbor.HeaderPath: func(r io.ReadSeeker) (stream.NodeReader, error) {
return cbor.NewCBORDecoder(r)
},
cbor.HeaderWithTagsPath: func(r io.Reader) (stream.NodeReader, error) {
cbor.HeaderWithTagsPath: func(r io.ReadSeeker) (stream.NodeReader, error) {
return cbor.NewCBORDecoder(r)
},
pb.MsgIOHeaderPath: func(r io.Reader) (stream.NodeReader, error) {
pb.MsgIOHeaderPath: func(r io.ReadSeeker) (stream.NodeReader, error) {
return pb.Decode(mc.WrapHeaderReader(pb.MsgIOHeader, r))
},
}
}

func Decode(r io.Reader) (stream.NodeReader, error) {
func Decode(r io.ReadSeeker) (stream.NodeReader, error) {
// get multicodec first header, should be mcmux.Header
err := mc.ConsumeHeader(r, Header)
if err != nil {
Expand Down
19 changes: 7 additions & 12 deletions coding/json/stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func init() {
}

type JSONDecoder struct {
r io.Reader
r io.ReadSeeker
pos int64
}

Expand All @@ -33,17 +33,12 @@ type jsonParser struct {
decoder *json.Decoder
}

func NewJSONDecoder(r io.Reader) (*JSONDecoder, error) {
s := r.(io.Seeker)
if s == nil {
return &JSONDecoder{r, -1}, nil
} else {
offset, err := s.Seek(0, 1)
if err != nil {
return nil, err
}
return &JSONDecoder{r, offset}, nil
func NewJSONDecoder(r io.ReadSeeker) (*JSONDecoder, error) {
offset, err := r.Seek(0, 1)
if err != nil {
return nil, err
}
return &JSONDecoder{r, offset}, nil
}

func (d *JSONDecoder) Read(cb reader.ReadFun) error {
Expand All @@ -52,7 +47,7 @@ func (d *JSONDecoder) Read(cb reader.ReadFun) error {
} else if d.pos == -1 {
d.pos = -2
} else {
newoffset, err := d.r.(io.Seeker).Seek(d.pos, 0)
newoffset, err := d.r.Seek(d.pos, 0)
if err != nil {
return err
} else if newoffset != d.pos {
Expand Down

0 comments on commit ec90690

Please sign in to comment.