github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/internal/inspectimage/writer/factory.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/pkg/logging"
    10  
    11  	"github.com/buildpacks/pack/internal/style"
    12  )
    13  
    14  type Factory struct{}
    15  
    16  type InspectImageWriter interface {
    17  	Print(
    18  		logger logging.Logger,
    19  		sharedInfo inspectimage.GeneralInfo,
    20  		local, remote *client.ImageInfo,
    21  		localErr, remoteErr error,
    22  	) error
    23  }
    24  
    25  func NewFactory() *Factory {
    26  	return &Factory{}
    27  }
    28  
    29  func (f *Factory) Writer(kind string, bom bool) (InspectImageWriter, error) {
    30  	if bom {
    31  		switch kind {
    32  		case "human-readable", "json":
    33  			return NewJSONBOM(), nil
    34  		case "yaml":
    35  			return NewYAMLBOM(), nil
    36  		}
    37  	} else {
    38  		switch kind {
    39  		case "human-readable":
    40  			return NewHumanReadable(), nil
    41  		case "json":
    42  			return NewJSON(), nil
    43  		case "yaml":
    44  			return NewYAML(), nil
    45  		case "toml":
    46  			return NewTOML(), nil
    47  		}
    48  	}
    49  
    50  	return nil, fmt.Errorf("output format %s is not supported", style.Symbol(kind))
    51  }