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 }