refactor: Decompose fetch func
This commit is contained in:
59
internal/compression/decompress.go
Normal file
59
internal/compression/decompress.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package compression
|
||||
|
||||
import (
|
||||
"compress/gzip"
|
||||
"context"
|
||||
"io"
|
||||
|
||||
"github.com/andybalholm/brotli"
|
||||
"github.com/cosnicolaou/pbzip2"
|
||||
"github.com/dsnet/compress/bzip2"
|
||||
"github.com/klauspost/compress/zstd"
|
||||
"github.com/klauspost/pgzip"
|
||||
"github.com/pierrec/lz4/v4"
|
||||
"github.com/pojntfx/stfs/pkg/config"
|
||||
)
|
||||
|
||||
func Decompress(
|
||||
src io.Reader,
|
||||
compressionFormat string,
|
||||
) (io.ReadCloser, error) {
|
||||
switch compressionFormat {
|
||||
case config.CompressionFormatGZipKey:
|
||||
fallthrough
|
||||
case config.CompressionFormatParallelGZipKey:
|
||||
if compressionFormat == config.CompressionFormatGZipKey {
|
||||
return gzip.NewReader(src)
|
||||
}
|
||||
|
||||
return pgzip.NewReader(src)
|
||||
case config.CompressionFormatLZ4Key:
|
||||
lz := lz4.NewReader(src)
|
||||
if err := lz.Apply(lz4.ConcurrencyOption(-1)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return io.NopCloser(lz), nil
|
||||
case config.CompressionFormatZStandardKey:
|
||||
zz, err := zstd.NewReader(src)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return io.NopCloser(zz), nil
|
||||
case config.CompressionFormatBrotliKey:
|
||||
br := brotli.NewReader(src)
|
||||
|
||||
return io.NopCloser(br), nil
|
||||
case config.CompressionFormatBzip2Key:
|
||||
return bzip2.NewReader(src, nil)
|
||||
case config.CompressionFormatBzip2ParallelKey:
|
||||
bz := pbzip2.NewReader(context.Background(), src)
|
||||
|
||||
return io.NopCloser(bz), nil
|
||||
case config.NoneKey:
|
||||
return io.NopCloser(src), nil
|
||||
default:
|
||||
return nil, config.ErrUnsupportedCompressionFormat
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user