1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-09-10 05:52:20 +08:00
Files
kubo/commands/channelmarshaler.go
Jeromy 206739d10c allow channel marshaler to return errors from cmds.Response
License: MIT
Signed-off-by: Jeromy <jeromyj@gmail.com>
2015-09-04 14:12:19 -07:00

40 lines
644 B
Go

package commands
import "io"
type ChannelMarshaler struct {
Channel <-chan interface{}
Marshaler func(interface{}) (io.Reader, error)
Res Response
reader io.Reader
}
func (cr *ChannelMarshaler) Read(p []byte) (int, error) {
if cr.reader == nil {
val, more := <-cr.Channel
if !more {
//check error in response
if cr.Res.Error() != nil {
return 0, cr.Res.Error()
}
return 0, io.EOF
}
r, err := cr.Marshaler(val)
if err != nil {
return 0, err
}
cr.reader = r
}
n, err := cr.reader.Read(p)
if err != nil && err != io.EOF {
return n, err
}
if n == 0 {
cr.reader = nil
}
return n, nil
}