package cp437tree import ( "fmt" "io" ) const ( VerticalRight = "├" DownLeft = "┐" UpRight = "└" DownRight = "┌" Horizontal ="─" Vertical = "│" ) /* ┌┐ // HeaderTop ├┐ // HeaderMid │├ // ItemMid │└ // ItemBottom └┐ // HeaderBottom └── //ItemEndBottom */ type Node struct { Text string Children *[]Node } func (o *Request) ToTreeGroup(w io.Writer, position rune) { middle := "├──┐" // default middle branch midRow := "│ ├── " botRow := "│ └── " topBranch := "┌──┐" endBranch := "└──┐" veryBottomRow := " └── " rowChars := "" if position == 't' { branch = topBranch } if position == 'b' { branch = endBranch } // platform name header rowChars = midRow // preparing the children variable so this whole thing can be extracted later. children := o.Versions childCount := len(children) - 1 for idx, v := range children { if idx == childCount { rowChars = botRow if position == 'b' { rowChars = veryBottomRow } } _, _ = fmt.Fprintf(w, "\n%s%s", rowChars, v) } // new line to end the row _, _ = fmt.Fprintf(w, "\n") } func idToPosition(id, count int) rune { // Returns 't' for top, 'b' for bottom, and 'm', for middle by comparing the idx to the count of rows. // Does not account for if count = 1 if id == 0 { return 't' } if id == count-1 { return 'b' } return 'm' }