github.com/xyproto/orbiton/v2@v2.65.12-0.20240516144430-e10a419274ec/gzip.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"compress/gzip"
     6  	"strings"
     7  )
     8  
     9  // stripGZ removes the trailing ".gz" suffix
    10  func stripGZ(filename string) string {
    11  	return strings.TrimSuffix(filename, ".gz")
    12  }
    13  
    14  // gUnzipData uncompressed gzip data
    15  func gUnzipData(data []byte) ([]byte, error) {
    16  	b := bytes.NewBuffer(data)
    17  	r, err := gzip.NewReader(b)
    18  	if err != nil {
    19  		return nil, err
    20  	}
    21  	defer r.Close()
    22  
    23  	var resB bytes.Buffer
    24  	if _, err = resB.ReadFrom(r); err != nil {
    25  		return nil, err
    26  	}
    27  	return resB.Bytes(), nil
    28  }
    29  
    30  // gZipData compresses data with gzip
    31  func gZipData(data []byte) ([]byte, error) {
    32  	var b bytes.Buffer
    33  	gz := gzip.NewWriter(&b)
    34  	defer gz.Close()
    35  
    36  	if _, err := gz.Write(data); err != nil {
    37  		return nil, err
    38  	}
    39  	if err := gz.Flush(); err != nil {
    40  		return nil, err
    41  	}
    42  	if err := gz.Close(); err != nil {
    43  		return nil, err
    44  	}
    45  	return b.Bytes(), nil
    46  }