syft/imgbom/pkg/catalog.go
2020-05-21 09:37:20 -04:00

49 lines
896 B
Go

package pkg
// TODO: add reader methods (by type, id, fuzzy search, etc)
type Catalog struct {
// TODO: catalog by package ID for potential indexing
packages map[Type][]Package
}
func NewCatalog() Catalog {
return Catalog{
packages: make(map[Type][]Package),
}
}
func (c *Catalog) Add(p Package) {
_, ok := c.packages[p.Type]
if !ok {
c.packages[p.Type] = make([]Package, 0)
}
c.packages[p.Type] = append(c.packages[p.Type], p)
}
func (c *Catalog) Enumerate(types ...Type) <-chan Package {
channel := make(chan Package)
go func() {
defer close(channel)
for ty, packages := range c.packages {
if len(types) != 0 {
found := false
typeCheck:
for _, t := range types {
if t == ty {
found = true
break typeCheck
}
}
if !found {
continue
}
}
for _, p := range packages {
channel <- p
}
}
}()
return channel
}