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 }