github.com/YousefHaggyHeroku/pack@v1.5.5/internal/builder/writer/factory.go (about)

     1  package writer
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/YousefHaggyHeroku/pack"
     7  	"github.com/YousefHaggyHeroku/pack/internal/config"
     8  	"github.com/YousefHaggyHeroku/pack/logging"
     9  
    10  	"github.com/YousefHaggyHeroku/pack/internal/style"
    11  )
    12  
    13  type Factory struct{}
    14  
    15  type BuilderWriter interface {
    16  	Print(
    17  		logger logging.Logger,
    18  		localRunImages []config.RunImage,
    19  		local, remote *pack.BuilderInfo,
    20  		localErr, remoteErr error,
    21  		builderInfo SharedBuilderInfo,
    22  	) error
    23  }
    24  
    25  type SharedBuilderInfo struct {
    26  	Name      string `json:"builder_name" yaml:"builder_name" toml:"builder_name"`
    27  	Trusted   bool   `json:"trusted" yaml:"trusted" toml:"trusted"`
    28  	IsDefault bool   `json:"default" yaml:"default" toml:"default"`
    29  }
    30  
    31  type BuilderWriterFactory interface {
    32  	Writer(kind string) (BuilderWriter, error)
    33  }
    34  
    35  func NewFactory() *Factory {
    36  	return &Factory{}
    37  }
    38  
    39  func (f *Factory) Writer(kind string) (BuilderWriter, error) {
    40  	switch kind {
    41  	case "human-readable":
    42  		return NewHumanReadable(), nil
    43  	case "json":
    44  		return NewJSON(), nil
    45  	case "yaml":
    46  		return NewYAML(), nil
    47  	case "toml":
    48  		return NewTOML(), nil
    49  	}
    50  
    51  	return nil, fmt.Errorf("output format %s is not supported", style.Symbol(kind))
    52  }