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 }