github.com/skippbox/kompose-origin@v0.0.0-20160524133224-16a9dca7bac2/project/info.go (about)

     1  package project
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"text/tabwriter"
     7  )
     8  
     9  // InfoPart holds key/value strings.
    10  type InfoPart struct {
    11  	Key, Value string
    12  }
    13  
    14  // InfoSet holds a list of Info.
    15  type InfoSet []Info
    16  
    17  // Info holds a list of InfoPart.
    18  type Info []InfoPart
    19  
    20  func (infos InfoSet) String(titleFlag bool) string {
    21  	//no error checking, none of this should fail
    22  	buffer := bytes.NewBuffer(make([]byte, 0, 1024))
    23  	tabwriter := tabwriter.NewWriter(buffer, 4, 4, 2, ' ', 0)
    24  
    25  	first := true
    26  	for _, info := range infos {
    27  		if first && titleFlag {
    28  			writeLine(tabwriter, true, info)
    29  		}
    30  		first = false
    31  		writeLine(tabwriter, false, info)
    32  	}
    33  
    34  	tabwriter.Flush()
    35  	return buffer.String()
    36  }
    37  
    38  func writeLine(writer io.Writer, key bool, info Info) {
    39  	first := true
    40  	for _, part := range info {
    41  		if !first {
    42  			writer.Write([]byte{'\t'})
    43  		}
    44  		first = false
    45  		if key {
    46  			writer.Write([]byte(part.Key))
    47  		} else {
    48  			writer.Write([]byte(part.Value))
    49  		}
    50  	}
    51  
    52  	writer.Write([]byte{'\n'})
    53  }