context.go 548 B

123456789101112131415161718192021222324252627282930
  1. // Package readers provides io.Reader related utilities.
  2. package readers
  3. import (
  4. "context"
  5. "io"
  6. )
  7. // NewContextReader creates a reader, that returns any errors that ctx gives
  8. func NewContextReader(ctx context.Context, r io.Reader) io.Reader {
  9. return &contextReader{
  10. ctx: ctx,
  11. r: r,
  12. }
  13. }
  14. type contextReader struct {
  15. ctx context.Context
  16. r io.Reader
  17. }
  18. // Read bytes as per io.Reader interface
  19. func (cr *contextReader) Read(p []byte) (n int, err error) {
  20. err = cr.ctx.Err()
  21. if err != nil {
  22. return 0, err
  23. }
  24. return cr.r.Read(p)
  25. }