s_compress.go 822 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package backends
  2. import (
  3. "compress/zlib"
  4. "github.com/flashmob/go-guerrilla/mail"
  5. "io"
  6. )
  7. func init() {
  8. streamers["compress"] = func() StreamDecorator {
  9. return StreamCompress()
  10. }
  11. }
  12. func StreamCompress() StreamDecorator {
  13. sd := StreamDecorator{}
  14. sd.p =
  15. func(sp StreamProcessor) StreamProcessor {
  16. var zw io.WriteCloser
  17. sd.Open = func(e *mail.Envelope) error {
  18. var err error
  19. zw, err = zlib.NewWriterLevel(sp, zlib.BestSpeed)
  20. return err
  21. }
  22. sd.Close = func() error {
  23. return zw.Close()
  24. }
  25. return StreamProcessWith(zw.Write)
  26. /*
  27. return StreamProcessWith(func(p []byte) (n int, err error) {
  28. var buf bytes.Buffer
  29. if n, err := io.Copy(w, bytes.NewReader(p)); err != nil {
  30. return int(n), err
  31. }
  32. return sp.Write(buf.Bytes())
  33. })
  34. */
  35. }
  36. return sd
  37. }