func (r AllRepoDetails) GetRows() [][]string {
	var allRows [][]string
	for _, repo := range r.Repos {
		var newRow []string
		v := reflect.ValueOf(repo)
		for i := 0; i < v.NumField(); i++ {
			newRow = append(newRow, v.Field(i).Interface().(string))
		}
		allRows = append(allRows, newRow)
	}
	return allRows
}
GetRows implements the TableData interface to generate tables for PullRequest objects
package data
import (
	"reflect"
)
type PullRequest struct {
	ID           string
	Title        string
	Owner        string
	Status       string
	SourceBranch string
	DestBranch   string
}
type PullRequests struct {
	PRs []PullRequest
}
type PullRequestDiff struct {
	DestCommit   string
	MergeCommit  string
	SourceBranch string
}
type NewPullRequest struct {
	Title          string
	Description    string
	Repository     string
	SourceRef      string
	DestinationRef string
}
type Path struct {
	Path     string
	PathType string
}
type MergeOptions struct {
	FF       bool
	Squash   bool
	ThreeWay bool
}
type MergeInput struct {
	Type               string
	PRID               string
	SourceCommit       string
	SourceBranch       string
	Repository         string
	ConflictDetail     string
	ConflictResolution string
	AuthorName         string
	AuthorEmail        string
	DeleteBranch       bool
}
type RepoDetails struct {
	Name string
	CloneSSH     string
	CloneHTTP    string
	LastModified string
}
type AllRepoDetails struct {
	Repos []RepoDetails
}
type TableData interface {
	GetHeaders() []string
	GetRows() [][]string
}
func (p PullRequests) GetHeaders() []string {
	if len(p.PRs) == 0 {
		var pr []PullRequest
		emptyPR := PullRequest{
			ID: "000",
		}
		pr = append(pr, emptyPR)
		pd := PullRequests{
			pr,
		}
		p = pd
	}
	val := reflect.ValueOf(p.PRs[0])
	var headers []string
	for i := 0; i < val.Type().NumField(); i++ {
		headers = append(headers, val.Type().Field(i).Name)
	}
	return headers
}
func (p PullRequests) GetRows() [][]string {
	var allRows [][]string
	for _, pr := range p.PRs {
		var newRow []string
		v := reflect.ValueOf(pr)
		for i := 0; i < v.NumField(); i++ {
			newRow = append(newRow, v.Field(i).Interface().(string))
		}
		allRows = append(allRows, newRow)
	}
	return allRows
}
func (r AllRepoDetails) GetHeaders() []string {
	val := reflect.ValueOf(r.Repos[0])
	var headers []string
	for i := 0; i < val.Type().NumField(); i++ {
		headers = append(headers, val.Type().Field(i).Name)
	}
	return headers
}