github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/syft/source/stereoscopesource/image_source_provider.go (about) 1 package stereoscopesource 2 3 import ( 4 "context" 5 6 "github.com/anchore/go-collections" 7 "github.com/anchore/stereoscope" 8 "github.com/anchore/stereoscope/pkg/image" 9 "github.com/anchore/syft/syft/source" 10 ) 11 12 const ImageTag = "image" 13 14 type ProviderConfig struct { 15 StereoscopeImageProviderConfig stereoscope.ImageProviderConfig 16 Exclude source.ExcludeConfig 17 Alias source.Alias 18 } 19 20 type stereoscopeImageSourceProvider struct { 21 stereoscopeProvider image.Provider 22 cfg ProviderConfig 23 } 24 25 var _ source.Provider = (*stereoscopeImageSourceProvider)(nil) 26 27 func (l stereoscopeImageSourceProvider) Name() string { 28 return l.stereoscopeProvider.Name() 29 } 30 31 func (l stereoscopeImageSourceProvider) Provide(ctx context.Context) (source.Source, error) { 32 img, err := l.stereoscopeProvider.Provide(ctx) 33 if err != nil { 34 return nil, err 35 } 36 cfg := ImageConfig{ 37 Reference: l.cfg.StereoscopeImageProviderConfig.UserInput, 38 Platform: l.cfg.StereoscopeImageProviderConfig.Platform, 39 RegistryOptions: &l.cfg.StereoscopeImageProviderConfig.Registry, 40 Exclude: l.cfg.Exclude, 41 Alias: l.cfg.Alias, 42 } 43 return New(img, cfg), nil 44 } 45 46 func Providers(cfg ProviderConfig) []collections.TaggedValue[source.Provider] { 47 stereoscopeProviders := collections.TaggedValueSet[source.Provider]{} 48 providers := stereoscope.ImageProviders(cfg.StereoscopeImageProviderConfig) 49 for _, provider := range providers { 50 var sourceProvider source.Provider = stereoscopeImageSourceProvider{ 51 stereoscopeProvider: provider.Value, 52 cfg: cfg, 53 } 54 stereoscopeProviders = append(stereoscopeProviders, 55 collections.NewTaggedValue(sourceProvider, append([]string{provider.Value.Name(), ImageTag}, provider.Tags...)...)) 56 } 57 return stereoscopeProviders 58 }