65 lines
		
	
	
		
			964 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			964 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package compression
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"compress/flate"
 | |
| 	"compress/gzip"
 | |
| )
 | |
| 
 | |
| // Gzip compression support
 | |
| type Gzip struct {
 | |
| 	*Options
 | |
| }
 | |
| 
 | |
| // NewGzip creates a Gzip + Options variable
 | |
| func NewGzip() *Gzip {
 | |
| 	gz := new(Gzip)
 | |
| 	gz.Options = new(Options)
 | |
| 	return gz
 | |
| }
 | |
| 
 | |
| // Compress to gzip
 | |
| func (gz *Gzip) Compress(content []byte) ([]byte, error) {
 | |
| 	if !gz.Options.Compress {
 | |
| 		return content, nil
 | |
| 	}
 | |
| 
 | |
| 	// method
 | |
| 	var m int
 | |
| 	switch gz.Options.Method {
 | |
| 	case "NoCompression":
 | |
| 		m = flate.NoCompression
 | |
| 		break
 | |
| 	case "BestSpeed":
 | |
| 		m = flate.BestSpeed
 | |
| 		break
 | |
| 	case "BestCompression":
 | |
| 		m = flate.BestCompression
 | |
| 		break
 | |
| 	default:
 | |
| 		m = flate.DefaultCompression
 | |
| 		break
 | |
| 	}
 | |
| 
 | |
| 	// compress
 | |
| 	var b bytes.Buffer
 | |
| 	w, err := gzip.NewWriterLevel(&b, m)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	// insert content
 | |
| 	_, err = w.Write(content)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	err = w.Close()
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	// compressed content
 | |
| 	return b.Bytes(), nil
 | |
| }
 |