func (n *Node) GetPath() string {
	return n._path
}
GetPath retrieves a node path
package golax
import "strings"
type Node struct {
	Interceptors         []*Interceptor
	InterceptorsDeep     []*Interceptor
	Methods              map[string]Handler
	Children             []*Node
	Documentation        Doc
	DocumentationMethods map[string]Doc
	Operations           map[string]*Operation
	_path          string
	_hasOperations bool
	_isParameter   bool
	_isRegex       bool
	_isFullPath    bool
	_parameterKey  string
}
func NewNode() *Node {
	return &Node{
		_path:                "",
		Interceptors:         []*Interceptor{},
		InterceptorsDeep:     []*Interceptor{},
		Methods:              map[string]Handler{},
		Children:             []*Node{},
		DocumentationMethods: map[string]Doc{},
		Operations:           map[string]*Operation{},
	}
}
func (n *Node) Method(m string, h Handler, d ...Doc) *Node {
	M := strings.ToUpper(m)
	n.Methods[M] = h
	if len(d) > 0 {
		n.DocumentationMethods[M] = d[0]
	}
	return n
}
func (n *Node) Interceptor(m *Interceptor) *Node {
	n.Interceptors = append(n.Interceptors, m)
	return n
}
func (n *Node) InterceptorDeep(m *Interceptor) *Node {
	n.InterceptorsDeep = append(n.InterceptorsDeep, m)
	return n
}
func (n *Node) Doc(d Doc) *Node {
	n.Documentation = d
	return n
}
func (n *Node) Node(p string) *Node {
	newNode := NewNode()
	newNode.SetPath(p)
	n.Children = append(n.Children, newNode)
	return newNode
}
func (n *Node) Operation(p string) *Operation {
	n._hasOperations = true
	newOperation := NewOperation()
	newOperation.Path = p
	n.Operations[p] = newOperation
	return newOperation
}
func (n *Node) SetPath(p string) {
	n._path = p
	if "{{*}}" == p {
		n._isFullPath = true
	} else if isParameter(p) {
		n._isParameter = true
		n._parameterKey = biTrim("{", p, "}")
	} else if isRegex(p) {
		n._isRegex = true
		n._parameterKey = biTrim("(", p, ")")
	}
}