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  }