53 lines
971 B
Go
53 lines
971 B
Go
package project
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"text/tabwriter"
|
|
)
|
|
|
|
// InfoPart holds key/value strings.
|
|
type InfoPart struct {
|
|
Key, Value string
|
|
}
|
|
|
|
// InfoSet holds a list of Info.
|
|
type InfoSet []Info
|
|
|
|
// Info holds a list of InfoPart.
|
|
type Info []InfoPart
|
|
|
|
func (infos InfoSet) String(titleFlag bool) string {
|
|
//no error checking, none of this should fail
|
|
buffer := bytes.NewBuffer(make([]byte, 0, 1024))
|
|
tabwriter := tabwriter.NewWriter(buffer, 4, 4, 2, ' ', 0)
|
|
|
|
first := true
|
|
for _, info := range infos {
|
|
if first && titleFlag {
|
|
writeLine(tabwriter, true, info)
|
|
}
|
|
first = false
|
|
writeLine(tabwriter, false, info)
|
|
}
|
|
|
|
tabwriter.Flush()
|
|
return buffer.String()
|
|
}
|
|
|
|
func writeLine(writer io.Writer, key bool, info Info) {
|
|
first := true
|
|
for _, part := range info {
|
|
if !first {
|
|
writer.Write([]byte{'\t'})
|
|
}
|
|
first = false
|
|
if key {
|
|
writer.Write([]byte(part.Key))
|
|
} else {
|
|
writer.Write([]byte(part.Value))
|
|
}
|
|
}
|
|
|
|
writer.Write([]byte{'\n'})
|
|
}
|