func GetCompression(opener Opener) (compression.Compression, error)
GetCompression detects whether an Opener is compressed and which algorithm is used.
Opener represents e.g. opening a file.
type Opener = func() (io.ReadCloser, error)
PeekReader is an io.Reader that also implements Peek a la bufio.Reader.
type PeekReader interface { io.Reader Peek(n int) ([]byte, error) }
func PeekCompression(r io.Reader) (compression.Compression, PeekReader, error)
PeekCompression detects whether the input stream is compressed and which algorithm is used.
If r implements Peek, we will use that directly, otherwise a small number of bytes are buffered to Peek at the gzip/zstd header, and the returned PeekReader can be used as a replacement for the consumed input io.Reader.