github.com/massongit/reviewdog@v0.0.0-20240331071725-4a16675475a8/comment.go (about)

     1  package reviewdog
     2  
     3  import "context"
     4  
     5  var _ BulkCommentService = (*multiCommentService)(nil)
     6  
     7  type multiCommentService struct {
     8  	services []CommentService
     9  }
    10  
    11  func (m *multiCommentService) Post(ctx context.Context, c *Comment) error {
    12  	for _, cs := range m.services {
    13  		if err := cs.Post(ctx, c); err != nil {
    14  			return err
    15  		}
    16  	}
    17  	return nil
    18  }
    19  
    20  func (m *multiCommentService) Flush(ctx context.Context) error {
    21  	for _, cs := range m.services {
    22  		if bulk, ok := cs.(BulkCommentService); ok {
    23  			if err := bulk.Flush(ctx); err != nil {
    24  				return err
    25  			}
    26  		}
    27  	}
    28  	return nil
    29  }
    30  
    31  // MultiCommentService creates a comment service that duplicates its post to
    32  // all the provided comment services.
    33  func MultiCommentService(services ...CommentService) CommentService {
    34  	s := make([]CommentService, len(services))
    35  	copy(s, services)
    36  	return &multiCommentService{services: s}
    37  }