github.com/zly-app/zapp@v1.3.3/pkg/compactor/compactor.go (about)

     1  package compactor
     2  
     3  import (
     4  	"io"
     5  
     6  	"go.uber.org/zap"
     7  
     8  	"github.com/zly-app/zapp/logger"
     9  )
    10  
    11  type ICompactor interface {
    12  	// 压缩
    13  	Compress(in io.Reader, out io.Writer) error
    14  	// 压缩
    15  	CompressBytes(in []byte) (out []byte, err error)
    16  	// 解压缩
    17  	UnCompress(in io.Reader, out io.Writer) error
    18  	// 解压缩
    19  	UnCompressBytes(in []byte) (out []byte, err error)
    20  }
    21  
    22  var compactorList = map[string]ICompactor{
    23  	RawCompactorName:  NewRawCompactor(),
    24  	ZStdCompactorName: NewZStdCompactor(),
    25  	GzipCompactorName: NewGzipCompactor(),
    26  }
    27  
    28  // 注册压缩器, 重复注册会panic
    29  func RegistryCompactor(name string, c ICompactor, replace ...bool) {
    30  	if len(replace) == 0 || !replace[0] {
    31  		if _, ok := compactorList[name]; ok {
    32  			logger.Log.Panic("Compactor重复注册", zap.String("name", name))
    33  		}
    34  	}
    35  	compactorList[name] = c
    36  }
    37  
    38  // 获取压缩器, 压缩器不存在会panic
    39  func GetCompactor(name string) ICompactor {
    40  	c, ok := compactorList[name]
    41  	if !ok {
    42  		logger.Log.Panic("未定义的CompactorName", zap.String("name", name))
    43  	}
    44  	return c
    45  }
    46  
    47  // 尝试获取压缩器
    48  func TryGetCompactor(name string) (ICompactor, bool) {
    49  	c, ok := compactorList[name]
    50  	return c, ok
    51  }