github.com/docker/libcompose@v0.4.1-0.20210616120443-2a046c0bdbf2/project/info.go (about)

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