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  }