github.com/sandwich-go/boost@v1.3.29/xcompress/compress.go (about)

     1  package xcompress
     2  
     3  type compress struct {
     4  	opts *Options
     5  	Compressor
     6  }
     7  
     8  // New 初始化 Compressor
     9  // 使用 GZIP 方式时,解压缩等级才有效,其他模式该参数无效
    10  // 默认方式,或者使用非 GZIP / Snappy 方式,均为 Dummy 方式
    11  func New(opts ...Option) (Compressor, error) {
    12  	var err error
    13  	c := &compress{opts: NewOptions(opts...)}
    14  	switch c.opts.GetType() {
    15  	case GZIP:
    16  		c.Compressor, err = newGzipCompressor(c.opts.GetLevel())
    17  	case Snappy:
    18  		c.Compressor, err = newSnappyCompressor()
    19  	default:
    20  		c.Compressor, err = newDummyCompressor()
    21  	}
    22  	if err != nil {
    23  		return nil, err
    24  	}
    25  	return c, nil
    26  }
    27  
    28  // MustNew 初始化 Compressor,否则 panic
    29  // 当使用 GZIP 方式时,必须传入正确的解压缩等级
    30  func MustNew(opts ...Option) Compressor {
    31  	c, err := New(opts...)
    32  	if err != nil {
    33  		panic(err)
    34  	}
    35  	return c
    36  }