github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/internal/inspectimage/writer/structured_bom_format.go (about)

     1  package writer
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/buildpacks/pack/internal/style"
     7  	"github.com/buildpacks/pack/pkg/client"
     8  
     9  	"github.com/buildpacks/pack/internal/inspectimage"
    10  
    11  	"github.com/buildpacks/pack/pkg/logging"
    12  )
    13  
    14  type StructuredBOMFormat struct {
    15  	MarshalFunc func(interface{}) ([]byte, error)
    16  }
    17  
    18  func (w *StructuredBOMFormat) Print(
    19  	logger logging.Logger,
    20  	generalInfo inspectimage.GeneralInfo,
    21  	local, remote *client.ImageInfo,
    22  	localErr, remoteErr error,
    23  ) error {
    24  	if local == nil && remote == nil {
    25  		return fmt.Errorf("unable to find image '%s' locally or remotely", generalInfo.Name)
    26  	}
    27  	if localErr != nil && remoteErr != nil {
    28  		return fmt.Errorf("preparing BOM output for %s: local :%s remote: %s", style.Symbol(generalInfo.Name), localErr, remoteErr)
    29  	}
    30  	out, err := w.MarshalFunc(inspectimage.BOMDisplay{
    31  		Remote:    inspectimage.NewBOMDisplay(remote),
    32  		Local:     inspectimage.NewBOMDisplay(local),
    33  		RemoteErr: errorString(remoteErr),
    34  		LocalErr:  errorString(localErr),
    35  	})
    36  
    37  	if err != nil {
    38  		return err
    39  	}
    40  
    41  	_, err = logger.Writer().Write(out)
    42  	return err
    43  }
    44  
    45  func errorString(err error) string {
    46  	if err == nil {
    47  		return ""
    48  	}
    49  	return err.Error()
    50  }