File: tree_from_leveled_list.go

package info (click to toggle)
golang-github-pterm-pterm 0.12.79-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,640 kB
  • sloc: makefile: 4
file content (40 lines) | stat: -rw-r--r-- 879 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package putils

import "github.com/pterm/pterm"

// TreeFromLeveledList converts a TreeItems list to a TreeNode and returns it.
func TreeFromLeveledList(leveledListItems pterm.LeveledList) pterm.TreeNode {
	if len(leveledListItems) == 0 {
		return pterm.TreeNode{}
	}

	root := &pterm.TreeNode{
		Children: []pterm.TreeNode{},
	}

	for i, record := range leveledListItems {
		last := root

		if record.Level < 0 {
			record.Level = 0
			leveledListItems[i].Level = 0
		}

		if len(leveledListItems)-1 != i {
			if leveledListItems[i+1].Level-1 > record.Level {
				leveledListItems[i+1].Level = record.Level + 1
			}
		}

		for i := 0; i < record.Level; i++ {
			lastIndex := len(last.Children) - 1
			last = &last.Children[lastIndex]
		}
		last.Children = append(last.Children, pterm.TreeNode{
			Children: []pterm.TreeNode{},
			Text:     record.Text,
		})
	}

	return *root
}