diff options
author | Matt Holt <mholt@users.noreply.github.com> | 2019-06-10 10:21:25 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-10 10:21:25 -0600 |
commit | f5b4f268dc73078467f19faf6068cc8047cabc7f (patch) | |
tree | bf44b5e31f83483c5f3e90762aa39452ec02f7d2 /modules/caddyhttp/encode/gzip | |
parent | ef5f29cfb257c7503763a4b16947c4eb6a7864c3 (diff) |
Implement encode middleware (#2)
* Implement encode middleware
* Add missing break; and add missing JSON struct field tag
Diffstat (limited to 'modules/caddyhttp/encode/gzip')
-rw-r--r-- | modules/caddyhttp/encode/gzip/gzip.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/modules/caddyhttp/encode/gzip/gzip.go b/modules/caddyhttp/encode/gzip/gzip.go new file mode 100644 index 0000000..0da5fc3 --- /dev/null +++ b/modules/caddyhttp/encode/gzip/gzip.go @@ -0,0 +1,36 @@ +package caddygzip + +import ( + "compress/flate" + "compress/gzip" // TODO: consider using https://github.com/klauspost/compress/gzip + + "github.com/caddyserver/caddy2" + "github.com/caddyserver/caddy2/modules/caddyhttp/encode" +) + +func init() { + caddy2.RegisterModule(caddy2.Module{ + Name: "http.encoders.gzip", + New: func() interface{} { return new(Gzip) }, + }) +} + +// Gzip can create gzip encoders. +type Gzip struct { + Level int `json:"level,omitempty"` +} + +// NewEncoder returns a new gzip writer. +func (g Gzip) NewEncoder() encode.Encoder { + if g.Level <= flate.NoCompression { + g.Level = defaultGzipLevel + } + if g.Level > flate.BestCompression { + g.Level = flate.BestCompression + } + writer, _ := gzip.NewWriterLevel(nil, g.Level) + return writer +} + +// Informed from http://blog.klauspost.com/gzip-performance-for-go-webservers/ +var defaultGzipLevel = 5 |