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  }