github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/compression/zstd.go (about)

     1  package compression
     2  
     3  import (
     4  	"io"
     5  
     6  	"github.com/concourse/baggageclaim"
     7  	"github.com/klauspost/compress/zstd"
     8  )
     9  
    10  type zstdCompression struct{}
    11  
    12  func NewZstdCompression() Compression {
    13  	return &zstdCompression{}
    14  }
    15  
    16  func (c *zstdCompression) NewReader(reader io.ReadCloser) (io.ReadCloser, error) {
    17  	d, err := zstd.NewReader(reader)
    18  	if err != nil {
    19  		return nil, err
    20  	}
    21  	return &zstdReader{decoder: d}, nil
    22  }
    23  
    24  func (c *zstdCompression) Encoding() baggageclaim.Encoding {
    25  	return baggageclaim.ZstdEncoding
    26  }
    27  
    28  type zstdReader struct {
    29  	decoder *zstd.Decoder
    30  }
    31  
    32  func (zr *zstdReader) Read(p []byte) (int, error) {
    33  	return zr.decoder.Read(p)
    34  }
    35  
    36  func (zr *zstdReader) Close() error {
    37  	zr.decoder.Close()
    38  	return nil
    39  }