Skip to content
Snippets Groups Projects
path_traversal.go 1.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • Manuel Kieweg's avatar
    Manuel Kieweg committed
    package main
    
    import (
    
    	schema "code.fbi.h-da.de/cocsn/yang-models/generated/arista"
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	"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)
    		}
    	}
    }
    
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    func main() {
    
    	tree := schema.SchemaTree
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	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
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		}
    	}
    }
    
    func processEntry(e *yang.Entry) *PathElement {
    	if e.Dir != nil {
    		elem := &PathElement{
    			Children: make([]*PathElement, len(e.Dir)),
    			Name:     e.Name,
    		}
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		for _,v := range e.Dir {
    
    			elem.Children[i] =  processEntry(v)
    			i++
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		}
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	}
    	leaf := &PathElement{
    		Name:     e.Name,
    	}
    	return leaf
    }