github.com/wfusion/gofusion@v1.1.14/common/infra/watermill/message/router/middleware/ignore_errors.go (about) 1 package middleware 2 3 import ( 4 "github.com/pkg/errors" 5 "github.com/wfusion/gofusion/common/infra/watermill/message" 6 ) 7 8 // IgnoreErrors provides a middleware that makes the handler ignore some explicitly whitelisted errors. 9 type IgnoreErrors struct { 10 ignoredErrors map[string]struct{} 11 } 12 13 // NewIgnoreErrors creates a new IgnoreErrors middleware. 14 func NewIgnoreErrors(errs []error) IgnoreErrors { 15 errsMap := make(map[string]struct{}, len(errs)) 16 17 for _, err := range errs { 18 errsMap[err.Error()] = struct{}{} 19 } 20 21 return IgnoreErrors{errsMap} 22 } 23 24 // Middleware returns the IgnoreErrors middleware. 25 func (i IgnoreErrors) Middleware(h message.HandlerFunc) message.HandlerFunc { 26 return func(msg *message.Message) ([]*message.Message, error) { 27 events, err := h(msg) 28 if err != nil { 29 if _, ok := i.ignoredErrors[errors.Cause(err).Error()]; ok { 30 return events, nil 31 } 32 33 return events, err 34 } 35 36 return events, nil 37 } 38 }