Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
path_traversal.go 1.04 KiB
package main

import (
	schema "code.fbi.h-da.de/cocsn/yang-models/generated/arista"
	"fmt"
	"github.com/openconfig/goyang/pkg/yang"
)

type PathElement struct {
	Children []*PathElement
	Name     string
}

func (p *PathElement)Print()  {
	printPE(0, p)
}

func printPE(indent int, pe *PathElement) {
	for i := 0; i < indent; i++ {
		fmt.Print("    ")
	}
	fmt.Println(pe.Name)
	if len(pe.Children) > 0 {
		for _,p := range pe.Children {
			printPE(indent+1, p)
		}
	}
}

func main() {
	tree := schema.SchemaTree
	paths := make(map[string]*PathElement)

	for k,v := range tree {
		if v.Parent != nil {
			if v.Parent.Name == "device" {
				pathElement := processEntry(v)
				pathElement.Print()
				paths[k] = pathElement
			}
		}
	}
}

func processEntry(e *yang.Entry) *PathElement {
	if e.Dir != nil {
		elem := &PathElement{
			Children: make([]*PathElement, len(e.Dir)),
			Name:     e.Name,
		}
		i := 0
		for _,v := range e.Dir {
			elem.Children[i] =  processEntry(v)
			i++
		}
		return elem
	}
	leaf := &PathElement{
		Name:     e.Name,
	}
	return leaf
}