mirror of
https://github.com/andatoshiki/shikigrid.git
synced 2026-06-06 04:04:15 +00:00
40 lines
1.0 KiB
Go
40 lines
1.0 KiB
Go
package wifi
|
|
|
|
import (
|
|
"bytes"
|
|
"compress/gzip"
|
|
"fmt"
|
|
"io/ioutil"
|
|
)
|
|
|
|
func Compress(data []byte) (bool, []byte, error) {
|
|
oldSize := len(data)
|
|
buf := bytes.Buffer{}
|
|
if zw, err := gzip.NewWriterLevel(&buf, gzip.BestCompression); err != nil {
|
|
return false, nil, fmt.Errorf("error initializing payload compression: %v", err)
|
|
} else if _, err := zw.Write(data); err != nil {
|
|
return false, nil, fmt.Errorf("error during payload compression: %v", err)
|
|
} else if err = zw.Close(); err != nil {
|
|
return false, nil, fmt.Errorf("error while finalizing payload compression: %v", err)
|
|
}
|
|
|
|
compressed := buf.Bytes()
|
|
newSize := len(compressed)
|
|
|
|
// log.Debug("gzip: %d > %d", oldSize, newSize)
|
|
|
|
if newSize < oldSize {
|
|
return true, compressed, nil
|
|
}
|
|
return false, data, nil
|
|
}
|
|
|
|
func Decompress(data []byte) ([]byte, error) {
|
|
if zr, err := gzip.NewReader(bytes.NewBuffer(data)); err != nil {
|
|
return nil, fmt.Errorf("error initializing payload decompression: %v", err)
|
|
} else {
|
|
defer zr.Close()
|
|
return ioutil.ReadAll(zr)
|
|
}
|
|
}
|