forked from xiaonanln/goworld
/
compress.go
35 lines (30 loc) · 832 Bytes
/
compress.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package compress
import (
"strings"
"github.com/pkg/errors"
"github.com/xiaonanln/goworld/engine/gwlog"
)
type Compressor interface {
Compress(b []byte, c []byte) ([]byte, error)
Decompress(c []byte, b []byte) error
}
var (
errNotFullyCompressed = errors.Errorf("not fully compressed")
)
func NewCompressor(compressFormat string) Compressor {
compressFormat = strings.ToLower(compressFormat)
if compressFormat == "snappy" {
return NewSnappyCompressor()
} else if compressFormat == "gwsnappy" {
return NewGWSnappyCompressor()
} else if compressFormat == "lz4" {
return NewLz4Compressor()
} else if compressFormat == "lzw" {
return NewLzwCompressor()
} else if compressFormat == "flate" {
return NewFlateCompressor()
} else {
gwlog.Panicf("unknown compress format: %s", compressFormat)
return nil
}
}