cgo/compressor.go (35 lines of code) (raw):

package cgo import ( "sync" "github.com/DataDog/zstd" sls "github.com/aliyun/aliyun-log-go-sdk" ) func SetZstdCgoCompressor(compressLevel int) error { sls.SetZstdCompressor(newZstdCompressor(compressLevel)) return nil } type zstdCompressor struct { ctxPool sync.Pool level int } func newZstdCompressor(level int) *zstdCompressor { res := &zstdCompressor{ level: level, } res.ctxPool = sync.Pool{ New: func() interface{} { return zstd.NewCtx() }, } return res } func (c *zstdCompressor) Compress(src, dst []byte) ([]byte, error) { zstdCtx := c.ctxPool.Get().(zstd.Ctx) defer c.ctxPool.Put(zstdCtx) return zstdCtx.CompressLevel(dst, src, c.level) } func (c *zstdCompressor) Decompress(src, dst []byte) ([]byte, error) { zstdCtx := c.ctxPool.Get().(zstd.Ctx) defer c.ctxPool.Put(zstdCtx) return zstdCtx.Decompress(dst, src) }