func FormatTable(table *parser.Table) string { columnToWidthMap := make(map[int]int) for i, header := range table.Headers { //table.get(header) returns a list of cells in that particular column cells := table.Get(header) columnToWidthMap[i] = findLongestCellWidth(cells, len(header)) } var tableStringBuffer bytes.Buffer tableStringBuffer.WriteString(fmt.Sprintf("%s|", getRepeatedChars(" ", tableLeftSpacing))) for i, header := range table.Headers { width := columnToWidthMap[i] tableStringBuffer.WriteString(fmt.Sprintf("%s|", addPaddingToCell(header, width))) } tableStringBuffer.WriteString("\n") tableStringBuffer.WriteString(fmt.Sprintf("%s|", getRepeatedChars(" ", tableLeftSpacing))) for i := range table.Headers { width := columnToWidthMap[i] cell := getRepeatedChars("-", width) tableStringBuffer.WriteString(fmt.Sprintf("%s|", addPaddingToCell(cell, width))) } tableStringBuffer.WriteString("\n") for _, row := range table.Rows() { tableStringBuffer.WriteString(fmt.Sprintf("%s|", getRepeatedChars(" ", tableLeftSpacing))) for i, cell := range row { width := columnToWidthMap[i] tableStringBuffer.WriteString(fmt.Sprintf("%s|", addPaddingToCell(cell, width))) } tableStringBuffer.WriteString("\n") } return string(tableStringBuffer.Bytes()) }