github.com/anchore/syft@v1.38.2/internal/task/factory.go (about)

     1  package task
     2  
     3  import (
     4  	"fmt"
     5  	"sort"
     6  	"strings"
     7  
     8  	"github.com/scylladb/go-set/strset"
     9  )
    10  
    11  type factory func(cfg CatalogingFactoryConfig) Task
    12  
    13  type Factories []factory
    14  
    15  func (f Factories) Tasks(cfg CatalogingFactoryConfig) ([]Task, error) {
    16  	var allTasks []Task
    17  	taskNames := strset.New()
    18  	duplicateTaskNames := strset.New()
    19  	var err error
    20  	for _, fact := range f {
    21  		tsk := fact(cfg)
    22  		if tsk == nil {
    23  			continue
    24  		}
    25  		tskName := tsk.Name()
    26  		if taskNames.Has(tskName) {
    27  			duplicateTaskNames.Add(tskName)
    28  		}
    29  
    30  		allTasks = append(allTasks, tsk)
    31  		taskNames.Add(tskName)
    32  	}
    33  	if duplicateTaskNames.Size() > 0 {
    34  		names := duplicateTaskNames.List()
    35  		sort.Strings(names)
    36  		err = fmt.Errorf("duplicate cataloger task names: %v", strings.Join(names, ", "))
    37  	}
    38  
    39  	return allTasks, err
    40  }