Jelajahi Sumber

don't need pointer when passing maps
header processor config
compressor processor config

flashmob 5 tahun lalu
induk
melakukan
e80fa7be6e
5 mengubah file dengan 20 tambahan dan 27 penghapusan
  1. 2 2
      backends/config.go
  2. 2 2
      backends/decorate_stream.go
  3. 12 1
      backends/s_compress.go
  4. 1 4
      backends/s_debug.go
  5. 3 18
      backends/s_header.go

+ 2 - 2
backends/config.go

@@ -69,9 +69,9 @@ func (c BackendConfig) toLower() {
 	}
 }
 
-func (c BackendConfig) group(ns string, name string) *ConfigGroup {
+func (c BackendConfig) group(ns string, name string) ConfigGroup {
 	if v, ok := c[ns][name]; ok {
-		return &v
+		return v
 	}
 	return nil
 }

+ 2 - 2
backends/decorate_stream.go

@@ -9,7 +9,7 @@ type streamOpenWith func(e *mail.Envelope) error
 
 type streamCloseWith func() error
 
-type streamConfigureWith func(cfg *ConfigGroup) error
+type streamConfigureWith func(cfg ConfigGroup) error
 
 // We define what a decorator to our processor will look like
 // StreamProcessor argument is the underlying processor that we're decorating
@@ -22,7 +22,7 @@ type StreamDecorator struct {
 	Configure streamConfigureWith
 }
 
-func (s StreamDecorator) ExtractConfig(cfg *ConfigGroup, i interface{}) error {
+func (s StreamDecorator) ExtractConfig(cfg ConfigGroup, i interface{}) error {
 	data, err := json.Marshal(cfg)
 	if err != nil {
 		return err

+ 12 - 1
backends/s_compress.go

@@ -13,14 +13,25 @@ func init() {
 	}
 }
 
+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, zlib.BestSpeed)
+				zw, err = zlib.NewWriterLevel(sp, config.CompressLevel)
 				return err
 			}
 

+ 1 - 4
backends/s_debug.go

@@ -32,13 +32,11 @@ type streamDebuggerConfig struct {
 }
 
 func StreamDebug() *StreamDecorator {
-
 	sd := &StreamDecorator{}
 	var config streamDebuggerConfig
-	sd.Configure = func(cfg *ConfigGroup) error {
+	sd.Configure = func(cfg ConfigGroup) error {
 		return sd.ExtractConfig(cfg, &config)
 	}
-
 	sd.Decorate =
 		func(sp StreamProcessor, a ...interface{}) StreamProcessor {
 			sd.Open = func(e *mail.Envelope) error {
@@ -62,6 +60,5 @@ func StreamDebug() *StreamDecorator {
 				return sp.Write(p)
 			})
 		}
-
 	return sd
 }

+ 3 - 18
backends/s_header.go

@@ -53,37 +53,23 @@ func (sh *streamHeader) addHeader(e *mail.Envelope, config *HeaderConfig) {
 		addHead += "	by " + e.RcptTo[0].Host + " with SMTP id " + hash + "@" + e.RcptTo[0].Host + ";\n"
 	}
 	addHead += "	" + time.Now().Format(time.RFC1123Z) + "\n"
-
 	sh.addHead = []byte(addHead)
 }
 
 func StreamHeader() *StreamDecorator {
-
 	var hc *HeaderConfig
-
-	Svc.AddInitializer(InitializeWith(func(backendConfig BackendConfig) error {
-		configType := BaseConfig(&HeaderConfig{})
-		bcfg, err := Svc.ExtractConfig(
-			ConfigStreamProcessors, "header", backendConfig, configType)
-		if err != nil {
-			return err
-		}
-		hc = bcfg.(*HeaderConfig)
-		return nil
-	}))
-
 	sd := &StreamDecorator{}
+	sd.Configure = func(cfg ConfigGroup) error {
+		return sd.ExtractConfig(cfg, &hc)
+	}
 	sd.Decorate =
-
 		func(sp StreamProcessor, a ...interface{}) StreamProcessor {
 			var sh *streamHeader
-
 			sd.Open = func(e *mail.Envelope) error {
 				sh = newStreamHeader(sp)
 				sh.addHeader(e, hc)
 				return nil
 			}
-
 			return StreamProcessWith(func(p []byte) (int, error) {
 				if sh.i < len(sh.addHead) {
 					for {
@@ -100,6 +86,5 @@ func StreamHeader() *StreamDecorator {
 				return sp.Write(p)
 			})
 		}
-
 	return sd
 }