httpbuffer - deflate/deflate.go
1 // Package deflate provides an Encoder for the httpbuffer package that uses
2 // deflate compression
3 package deflate // import "vimagination.zapto.org/httpbuffer/deflate"
4
5 import (
6 "compress/flate"
7 "io"
8 "sync"
9
10 "vimagination.zapto.org/httpbuffer"
11 )
12
13 type flateWriter struct {
14 *flate.Writer
15 }
16
17 func (f flateWriter) WriteString(str string) (int, error) {
18 return f.Write([]byte(str))
19 }
20
21 var (
22 // Compression sets the compression level for the deflate encoder
23 Compression = flate.BestCompression
24
25 pool = sync.Pool{
26 New: func() interface{} {
27 d, _ := flate.NewWriter(nil, Compression)
28 return flateWriter{d}
29 },
30 }
31 )
32
33 type encoding struct{}
34
35 func (encoding) Open(w io.Writer) io.Writer {
36 d := pool.Get().(flateWriter)
37 d.Reset(w)
38 return d
39 }
40
41 func (encoding) Close(w io.Writer) {
42 d := w.(flateWriter)
43 d.Close()
44 pool.Put(w)
45 }
46
47 func (encoding) Name() string {
48 return "deflate"
49 }
50
51 func init() {
52 httpbuffer.Register(encoding{})
53 }