2018-11-09 13:54:47 +00:00
|
|
|
|
|
|
|
|
2018-11-11 16:44:30 +00:00
|
|
|
package archiver
|
2018-11-09 13:54:47 +00:00
|
|
|
|
|
|
|
|
|
|
|
import "bytes"
|
|
|
|
import "compress/gzip"
|
|
|
|
import "fmt"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func Compress (_data []byte, _algorithm string) ([]byte, string, error) {
|
|
|
|
switch _algorithm {
|
|
|
|
case "gz", "gzip" :
|
|
|
|
return CompressGzip (_data)
|
|
|
|
case "br", "brotli" :
|
|
|
|
return CompressBrotli (_data)
|
|
|
|
case "", "none", "identity" :
|
|
|
|
return _data, "identity", nil
|
|
|
|
default :
|
|
|
|
return nil, "", fmt.Errorf ("[ea23f966] invalid compression algorithm `%s`", _algorithm)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func CompressGzip (_data []byte) ([]byte, string, error) {
|
|
|
|
|
|
|
|
_buffer := & bytes.Buffer {}
|
|
|
|
|
|
|
|
var _encoder *gzip.Writer
|
|
|
|
if _encoder_0, _error := gzip.NewWriterLevel (_buffer, gzip.BestCompression); _error == nil {
|
|
|
|
_encoder = _encoder_0
|
|
|
|
} else {
|
|
|
|
return nil, "", _error
|
|
|
|
}
|
|
|
|
|
|
|
|
if _, _error := _encoder.Write (_data); _error != nil {
|
|
|
|
return nil, "", _error
|
|
|
|
}
|
|
|
|
if _error := _encoder.Close (); _error != nil {
|
|
|
|
return nil, "", _error
|
|
|
|
}
|
|
|
|
|
|
|
|
_data = _buffer.Bytes ()
|
|
|
|
return _data, "gzip", nil
|
|
|
|
}
|
|
|
|
|