Matthew Holt
6 years ago
6 changed files with 86 additions and 5 deletions
@ -0,0 +1,51 @@ |
|||
package caddybrotli |
|||
|
|||
import ( |
|||
"fmt" |
|||
|
|||
"github.com/andybalholm/brotli" |
|||
"github.com/caddyserver/caddy2" |
|||
"github.com/caddyserver/caddy2/modules/caddyhttp/encode" |
|||
) |
|||
|
|||
func init() { |
|||
caddy2.RegisterModule(caddy2.Module{ |
|||
Name: "http.encoders.brotli", |
|||
New: func() interface{} { return new(Brotli) }, |
|||
}) |
|||
} |
|||
|
|||
// Brotli can create brotli encoders. Note that brotli
|
|||
// is not known for great encoding performance.
|
|||
type Brotli struct { |
|||
Quality *int `json:"quality,omitempty"` |
|||
} |
|||
|
|||
// Validate validates b's configuration.
|
|||
func (b Brotli) Validate() error { |
|||
if b.Quality != nil { |
|||
quality := *b.Quality |
|||
if quality < brotli.BestSpeed { |
|||
return fmt.Errorf("quality too low; must be >= %d", brotli.BestSpeed) |
|||
} |
|||
if quality > brotli.BestCompression { |
|||
return fmt.Errorf("quality too high; must be <= %d", brotli.BestCompression) |
|||
} |
|||
} |
|||
return nil |
|||
} |
|||
|
|||
// NewEncoder returns a new brotli writer.
|
|||
func (b Brotli) NewEncoder() encode.Encoder { |
|||
quality := brotli.DefaultCompression |
|||
if b.Quality != nil { |
|||
quality = *b.Quality |
|||
} |
|||
return brotli.NewWriterLevel(nil, quality) |
|||
} |
|||
|
|||
// Interface guards
|
|||
var ( |
|||
_ encode.Encoding = (*Brotli)(nil) |
|||
_ caddy2.Validator = (*Brotli)(nil) |
|||
) |
Loading…
Reference in new issue