forked from abdullin/cellar
-
Notifications
You must be signed in to change notification settings - Fork 1
/
compressor.go
42 lines (31 loc) · 786 Bytes
/
compressor.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
36
37
38
39
40
41
42
package cellar
import (
"io"
"github.com/pierrec/lz4"
)
type Compressor interface {
Compress(io.Writer) (CompressionWriter, error)
}
type Decompressor interface {
Decompress(io.Reader) (io.Reader, error)
}
// CompressionWriter is based on the functions needed from the lz4 compressor
type CompressionWriter interface {
Close() error
io.Writer
}
var _ Compressor = &ChainCompressor{}
type ChainCompressor struct {
CompressionLevel int
}
func (c ChainCompressor) Compress(w io.Writer) (CompressionWriter, error) {
zw := lz4.NewWriter(w)
zw.Header.CompressionLevel = c.CompressionLevel
return zw, nil
}
var _ Decompressor
type ChainDecompressor struct{}
func (c ChainDecompressor) Decompress(r io.Reader) (io.Reader, error) {
zr := lz4.NewReader(r)
return zr, nil
}