2020-11-17 16:29:00 +00:00
|
|
|
package blobstor
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/klauspost/compress/zstd"
|
|
|
|
)
|
|
|
|
|
2021-10-07 14:50:36 +00:00
|
|
|
// zstdFrameMagic contains first 4 bytes of any compressed object
|
|
|
|
// https://github.com/klauspost/compress/blob/master/zstd/framedec.go#L58 .
|
|
|
|
var zstdFrameMagic = []byte{0x28, 0xb5, 0x2f, 0xfd}
|
|
|
|
|
2020-11-17 16:29:00 +00:00
|
|
|
func noOpCompressor(data []byte) []byte {
|
|
|
|
return data
|
|
|
|
}
|
|
|
|
|
|
|
|
func noOpDecompressor(data []byte) ([]byte, error) {
|
|
|
|
return data, nil
|
|
|
|
}
|
|
|
|
|
2020-11-18 12:27:21 +00:00
|
|
|
func zstdCompressor() (func([]byte) []byte, error) {
|
2020-11-17 16:29:00 +00:00
|
|
|
enc, err := zstd.NewWriter(nil)
|
|
|
|
if err != nil {
|
2020-11-18 12:27:21 +00:00
|
|
|
return nil, err
|
2020-11-17 16:29:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return func(data []byte) []byte {
|
|
|
|
return enc.EncodeAll(data, make([]byte, 0, len(data)))
|
2020-11-18 12:27:21 +00:00
|
|
|
}, nil
|
2020-11-17 16:29:00 +00:00
|
|
|
}
|
|
|
|
|
2020-11-18 12:27:21 +00:00
|
|
|
func zstdDecompressor() (func([]byte) ([]byte, error), error) {
|
2020-11-17 16:29:00 +00:00
|
|
|
dec, err := zstd.NewReader(nil)
|
|
|
|
if err != nil {
|
2020-11-18 12:27:21 +00:00
|
|
|
return nil, err
|
2020-11-17 16:29:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return func(data []byte) ([]byte, error) {
|
|
|
|
return dec.DecodeAll(data, nil)
|
2020-11-18 12:27:21 +00:00
|
|
|
}, nil
|
2020-11-17 16:29:00 +00:00
|
|
|
}
|