Skip to content

Commit

Permalink
Upgrade CancelCloser to also return seekers when possible
Browse files Browse the repository at this point in the history
For #457

The download pipeline returns a CancelCloser, making this required.
  • Loading branch information
turt2live committed Sep 7, 2023
1 parent 17412db commit 687838a
Showing 1 changed file with 25 additions and 9 deletions.
34 changes: 25 additions & 9 deletions util/readers/cancel_closer.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,40 @@ package readers

import "io"

type CancellableCloser interface {
io.ReadCloser
}

type CancelCloser struct {
io.ReadCloser
r io.ReadCloser
cancel func()
}

func NewCancelCloser(r io.ReadCloser, cancel func()) *CancelCloser {
return &CancelCloser{
r: r,
cancel: cancel,
}
type CancelSeekCloser struct {
io.ReadSeekCloser
cancel func()
}

func (c *CancelCloser) Read(p []byte) (int, error) {
return c.r.Read(p)
func NewCancelCloser(r io.ReadCloser, cancel func()) CancellableCloser {
if rsc, ok := r.(io.ReadSeekCloser); ok {
return &CancelSeekCloser{
ReadSeekCloser: rsc,
cancel: cancel,
}
} else {
return &CancelCloser{
ReadCloser: r,
cancel: cancel,
}
}
}

func (c *CancelCloser) Close() error {
c.cancel()
return c.r.Close()
return c.ReadCloser.Close()
}

func (c *CancelSeekCloser) Close() error {
c.cancel()
return c.ReadSeekCloser.Close()
}

0 comments on commit 687838a

Please sign in to comment.