48 lines
877 B
Go
48 lines
877 B
Go
package ctxio
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
)
|
|
|
|
type ReaderAtCloser interface {
|
|
ReaderAt
|
|
Closer
|
|
}
|
|
|
|
type ReaderAt interface {
|
|
ReadAt(ctx context.Context, p []byte, off int64) (n int, err error)
|
|
}
|
|
|
|
type Reader interface {
|
|
Read(ctx context.Context, p []byte) (n int, err error)
|
|
}
|
|
|
|
type Closer interface {
|
|
Close(ctx context.Context) error
|
|
}
|
|
type contextReader struct {
|
|
ctx context.Context
|
|
r Reader
|
|
}
|
|
|
|
func (r *contextReader) Read(p []byte) (n int, err error) {
|
|
return r.r.Read(r.ctx, p)
|
|
}
|
|
|
|
func IoReaderAt(ctx context.Context, r ReaderAt) io.ReaderAt {
|
|
return &contextReaderAt{ctx: ctx, r: r}
|
|
}
|
|
|
|
type contextReaderAt struct {
|
|
ctx context.Context
|
|
r ReaderAt
|
|
}
|
|
|
|
func (c *contextReaderAt) ReadAt(p []byte, off int64) (n int, err error) {
|
|
return c.r.ReadAt(c.ctx, p, off)
|
|
}
|
|
|
|
func IoReader(ctx context.Context, r Reader) io.Reader {
|
|
return &contextReader{ctx: ctx, r: r}
|
|
}
|