github.com/paketo-buildpacks/packit@v1.3.2-0.20211206231111-86b75c657449/postal/internal/dependency_mappings.go (about)

     1  package internal
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/paketo-buildpacks/packit/servicebindings"
     6  )
     7  
     8  //go:generate faux --interface BindingResolver --output fakes/binding_resolver.go
     9  type BindingResolver interface {
    10  	Resolve(typ, provider, platformDir string) ([]servicebindings.Binding, error)
    11  }
    12  
    13  type DependencyMappingResolver struct {
    14  	bindingResolver BindingResolver
    15  }
    16  
    17  func NewDependencyMappingResolver(bindingResolver BindingResolver) DependencyMappingResolver {
    18  	return DependencyMappingResolver{
    19  		bindingResolver: bindingResolver,
    20  	}
    21  }
    22  
    23  // FindDependencyMapping looks up if there is a matching dependency mapping
    24  func (d DependencyMappingResolver) FindDependencyMapping(sha256, platformDir string) (string, error) {
    25  	bindings, err := d.bindingResolver.Resolve("dependency-mapping", "", platformDir)
    26  	if err != nil {
    27  		return "", fmt.Errorf("failed to resolve 'dependency-mapping' binding: %w", err)
    28  	}
    29  
    30  	for _, binding := range bindings {
    31  		if uri, ok := binding.Entries[sha256]; ok {
    32  			return uri.ReadString()
    33  		}
    34  	}
    35  
    36  	return "", nil
    37  }