William Petit
a5c67c29d0
Some checks failed
arcad/edge/pipeline/head There was a failure building this commit
44 lines
870 B
Go
44 lines
870 B
Go
package zim
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/klauspost/compress/zstd"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type ZstdBlobReader struct {
|
|
decoder *zstd.Decoder
|
|
}
|
|
|
|
// Close implements io.ReadCloser.
|
|
func (r *ZstdBlobReader) Close() error {
|
|
r.decoder.Close()
|
|
return nil
|
|
}
|
|
|
|
// Read implements io.ReadCloser.
|
|
func (r *ZstdBlobReader) Read(p []byte) (n int, err error) {
|
|
return r.decoder.Read(p)
|
|
}
|
|
|
|
var _ io.ReadCloser = &ZstdBlobReader{}
|
|
|
|
func NewZStdBlobReader(reader *Reader, clusterStartOffset, clusterEndOffset uint64, blobIndex uint32, blobSize int) *CompressedBlobReader {
|
|
return NewCompressedBlobReader(
|
|
reader,
|
|
func(r io.Reader) (io.ReadCloser, error) {
|
|
decoder, err := zstd.NewReader(r)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
return &ZstdBlobReader{decoder}, nil
|
|
},
|
|
clusterStartOffset,
|
|
clusterEndOffset,
|
|
blobIndex,
|
|
blobSize,
|
|
)
|
|
}
|