From f5b4f268dc73078467f19faf6068cc8047cabc7f Mon Sep 17 00:00:00 2001 From: Matt Holt Date: Mon, 10 Jun 2019 10:21:25 -0600 Subject: Implement encode middleware (#2) * Implement encode middleware * Add missing break; and add missing JSON struct field tag --- modules/caddyhttp/encode/gzip/gzip.go | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 modules/caddyhttp/encode/gzip/gzip.go (limited to 'modules/caddyhttp/encode/gzip') 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 -- cgit v1.2.3