123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- package backends
- import (
- "compress/zlib"
- "io"
- "github.com/flashmob/go-guerrilla/mail"
- )
- func init() {
- Streamers["compress"] = func() *StreamDecorator {
- return StreamCompress()
- }
- }
- type streamCompressConfig struct {
- CompressLevel int `json:"compress_level,omitempty"`
- }
- func StreamCompress() *StreamDecorator {
- sd := &StreamDecorator{}
- var config streamCompressConfig
- sd.Configure = func(cfg ConfigGroup) error {
- if _, ok := cfg["compress_level"]; !ok {
- cfg["compress_level"] = zlib.BestSpeed
- }
- return sd.ExtractConfig(cfg, &config)
- }
- sd.Decorate =
- func(sp StreamProcessor, a ...interface{}) StreamProcessor {
- var zw io.WriteCloser
- sd.Open = func(e *mail.Envelope) error {
- var err error
- zw, err = zlib.NewWriterLevel(sp, config.CompressLevel)
- return err
- }
- sd.Close = func() error {
- return zw.Close()
- }
- return StreamProcessWith(func(p []byte) (int, error) {
- return zw.Write(p)
- })
- }
- return sd
- }
|