s_process.go 685 B

1234567891011121314151617181920212223242526272829303132333435
  1. package backends
  2. import (
  3. "bytes"
  4. "github.com/flashmob/go-guerrilla/mail"
  5. "io"
  6. )
  7. func init() {
  8. streamers["process"] = func() *StreamDecorator {
  9. return StreamProcess()
  10. }
  11. }
  12. // Buffers to envelope.Data so that processors can be called on it at the end
  13. func StreamProcess() *StreamDecorator {
  14. sd := &StreamDecorator{}
  15. sd.p =
  16. func(sp StreamProcessor) StreamProcessor {
  17. var envelope *mail.Envelope
  18. sd.Open = func(e *mail.Envelope) error {
  19. envelope = e
  20. return nil
  21. }
  22. return StreamProcessWith(func(p []byte) (int, error) {
  23. tr := io.TeeReader(bytes.NewReader(p), sp)
  24. n, err := envelope.Data.ReadFrom(tr)
  25. return int(n), err
  26. })
  27. }
  28. return sd
  29. }