-
Notifications
You must be signed in to change notification settings - Fork 2
/
lz4.go
49 lines (41 loc) · 1.13 KB
/
lz4.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
43
44
45
46
47
48
49
package mutators
import (
"io"
"github.com/batmac/ccat/pkg/log"
"github.com/pierrec/lz4/v4"
)
func init() {
singleRegister("unlz4", unlz4, withDescription("decompress lz4 data"),
withCategory("decompress"),
)
singleRegister("lz4", clz4, withDescription("compress to lz4 data (X:0 is compression level, 0-9)"),
withCategory("compress"),
withConfigBuilder(stdConfigUint64WithDefault(uint64(lz4.Fast))),
)
}
func unlz4(out io.WriteCloser, in io.ReadCloser, _ any) (int64, error) {
d := lz4.NewReader(in)
if d == nil {
log.Fatal("lz4 decompressor failed to init")
}
n, err := io.Copy(out, d)
return n, err
}
func clz4(out io.WriteCloser, in io.ReadCloser, config any) (int64, error) {
c := config.(uint64)
compressionLevel := lz4.Fast
if c != 0 {
compressionLevel = lz4.CompressionLevel(1 << (8 + lz4.CompressionLevel(c)))
}
log.Debugf("compression level: %s", compressionLevel)
e := lz4.NewWriter(out)
if e == nil {
log.Fatal("compressor failed to init")
}
if err := e.Apply(lz4.CompressionLevelOption(compressionLevel)); err != nil {
log.Fatal(err.Error())
}
n, err := io.Copy(e, in)
e.Close()
return n, err
}