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  }