github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/syft/format/internal/stream/seekable_reader.go (about)

     1  package stream
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io"
     7  )
     8  
     9  func SeekableReader(reader io.Reader) (io.ReadSeeker, error) {
    10  	if reader == nil {
    11  		return nil, fmt.Errorf("no bytes provided")
    12  	}
    13  
    14  	if r, ok := reader.(io.ReadSeeker); ok {
    15  		return r, nil
    16  	}
    17  
    18  	content, err := io.ReadAll(reader)
    19  	if err != nil {
    20  		return nil, err
    21  	}
    22  
    23  	return bytes.NewReader(content), nil
    24  }