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 }