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  }