github.com/zly-app/zapp@v1.3.3/pkg/compactor/gzip.go (about) 1 package compactor 2 3 import ( 4 "bytes" 5 "compress/gzip" 6 "io" 7 ) 8 9 const GzipCompactorName = "gzip" 10 11 type GzipCompactor struct{} 12 13 func (r GzipCompactor) Compress(in io.Reader, out io.Writer) error { 14 w := gzip.NewWriter(out) 15 _, err := io.Copy(w, in) 16 if err != nil { 17 return err 18 } 19 return w.Close() 20 } 21 22 func (r GzipCompactor) CompressBytes(in []byte) (out []byte, err error) { 23 var outIO bytes.Buffer 24 err = r.Compress(bytes.NewReader(in), &outIO) 25 if err != nil { 26 return nil, err 27 } 28 return outIO.Bytes(), nil 29 } 30 31 func (r GzipCompactor) UnCompress(in io.Reader, out io.Writer) error { 32 read, err := gzip.NewReader(in) 33 if err != nil { 34 return err 35 } 36 _, err = io.Copy(out, read) 37 if err != nil { 38 return err 39 } 40 return read.Close() 41 } 42 43 func (r GzipCompactor) UnCompressBytes(in []byte) (out []byte, err error) { 44 var outIO bytes.Buffer 45 err = r.UnCompress(bytes.NewReader(in), &outIO) 46 if err != nil { 47 return nil, err 48 } 49 return outIO.Bytes(), nil 50 } 51 52 func NewGzipCompactor() ICompactor { 53 return GzipCompactor{} 54 }