github.com/shipa-corp/ketch@v0.6.0/cmd/ketch/output/output.go (about) 1 package output 2 3 import ( 4 "errors" 5 "io" 6 "os" 7 8 "sigs.k8s.io/yaml" 9 ) 10 11 type writer interface { 12 write() error 13 } 14 15 var ErrFileExists = errors.New("file already exists") 16 17 // Write writes data to out, switching marshaling type based on outputFlag 18 func Write(data interface{}, out io.Writer, outputFlag string) error { 19 var w writer 20 switch outputFlag { 21 default: 22 w = &columnOutput{ 23 data: data, 24 writer: out, 25 } 26 } 27 return w.write() 28 } 29 30 // WriteToFileOrOut marshals output to yaml and writes to file, if a filename is passed, or out. 31 func WriteToFileOrOut(output interface{}, out io.Writer, filename string) error { 32 if filename != "" { 33 _, err := os.Stat(filename) 34 if !os.IsNotExist(err) { 35 return ErrFileExists 36 } 37 f, err := os.Create(filename) 38 if err != nil { 39 return err 40 } 41 defer f.Close() 42 out = f 43 } 44 b, err := yaml.Marshal(output) 45 if err != nil { 46 return err 47 } 48 _, err = out.Write(b) 49 return err 50 }