github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/cmd/serve/s3/ioutils.go (about)

     1  package s3
     2  
     3  import "io"
     4  
     5  type noOpReadCloser struct{}
     6  
     7  type readerWithCloser struct {
     8  	io.Reader
     9  	closer func() error
    10  }
    11  
    12  var _ io.ReadCloser = &readerWithCloser{}
    13  
    14  func (d noOpReadCloser) Read(b []byte) (n int, err error) {
    15  	return 0, io.EOF
    16  }
    17  
    18  func (d noOpReadCloser) Close() error {
    19  	return nil
    20  }
    21  
    22  func limitReadCloser(rdr io.Reader, closer func() error, sz int64) io.ReadCloser {
    23  	return &readerWithCloser{
    24  		Reader: io.LimitReader(rdr, sz),
    25  		closer: closer,
    26  	}
    27  }
    28  
    29  func (rwc *readerWithCloser) Close() error {
    30  	if rwc.closer != nil {
    31  		return rwc.closer()
    32  	}
    33  	return nil
    34  }