github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/internal/inspectimage/writer/structured_format.go (about) 1 package writer 2 3 import ( 4 "fmt" 5 6 "github.com/buildpacks/pack/internal/inspectimage" 7 "github.com/buildpacks/pack/pkg/client" 8 9 "github.com/buildpacks/pack/internal/style" 10 "github.com/buildpacks/pack/pkg/logging" 11 ) 12 13 type StructuredFormat struct { 14 MarshalFunc func(interface{}) ([]byte, error) 15 } 16 17 func (w *StructuredFormat) Print( 18 logger logging.Logger, 19 generalInfo inspectimage.GeneralInfo, 20 local, remote *client.ImageInfo, 21 localErr, remoteErr error, 22 ) error { 23 // synthesize all objects here using methods 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 { 28 return fmt.Errorf("preparing output for %s: %w", style.Symbol(generalInfo.Name), localErr) 29 } 30 31 if remoteErr != nil { 32 return fmt.Errorf("preparing output for %s: %w", style.Symbol(generalInfo.Name), remoteErr) 33 } 34 35 localInfo := inspectimage.NewInfoDisplay(local, generalInfo) 36 remoteInfo := inspectimage.NewInfoDisplay(remote, generalInfo) 37 38 out, err := w.MarshalFunc(inspectimage.InspectOutput{ 39 ImageName: generalInfo.Name, 40 Remote: remoteInfo, 41 Local: localInfo, 42 }) 43 if err != nil { 44 panic(err) 45 } 46 47 _, err = logger.Writer().Write(out) 48 return err 49 }